题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
这个题目还是比较简单的。这个题目的关键点在于分解出每个数的个位,十位,百位。而后再执行一个判断。我们在外层用for循环来控制。废话不多直接上代码:
//水仙花数
public class Num_daffodils {
public static void main(String args[]) {
for(int i = 100;i<=999;i++) {
int q = i/100; //百位
int w = (i%100)/10; //十位
int e = i%10;
int a = (int)Math.pow(q, 3);
int s = (int)Math.pow(w, 3);
int d = (int)Math.pow(e, 3);
if(i == (a+s+d))
{
System.out.println("水仙花数有"+i);
}
}
}
}
可能大家不知道Math.pow();这里我就不多费笔墨了。
结果如下:
其实获取数字的各个位数的方法还有很多我上面的程序只是其中一部分。
然后我们老规矩看看大神代码:
/**
* 水仙花数
*/
public static void no3() {
for(int i = 100;i < 1000;i++) {
//取出每一个数字
int bai = i / 100;
int shi = (i%100)/10;
int ge = i % 10;//10^3
if(Math.pow(bai, 3)+Math.pow(shi, 3)+Math.pow(ge, 3) == i) {
System.out.println("水仙花数有"+i);
}
}
}
这次大神只是没有把计算的值付给一个中间变量,可能这也是编码习惯的问题吧,我比较喜欢把计算的数值赋值给一个变量。