分析:
只需要枚举所有的三位整数,将它们的三位分别分离出来,然后计算立方和,判断与原数是否相同即可。
Java代码实现:
方法一:
public class Main {
public static void main(String[] args) {
int g,s,b;
for(int i=100;i<1000;i++){
g=i/1%10;//个位数字
s=i/10%10;//十位数字
b=i/100%10;//百位数字
if(g*g*g+s*s*s+b*b*b==i){
System.out.println(i);
}
}
}
}
这种方法虽然简单易懂,但是并没有使用到Java 的特性。下面的代码是使用了Java的Math函数的。
方法二:
public class Main {
public static void main(String[] args) {
int a[] = new int[3];
for(int num = 100; num < 1000; num ++) {
int sum = 0;
a[0] = num / 100 % 10; //百位数字
a[1] = num / 10 % 10; //十位数字
a[2] = num / 1 % 10; //个位数字
//对已经拆分出来的各位数字的立方求和
for (int i = 0; i < 3; i++) {
sum += (int) Math.pow(a[i], 3);
}
//打印出符合条件的数字
if (num == sum) {
System.out.println(num);
}
}
}
}
代码中的Math.pow(base, exponent) 函数返回基数(base)的指数(exponent)次幂,即 baseexponent。
通过查看API文档我们发现,poew()函数的返回值类型是static double。
由于 pow 是 Math 的静态方法,所以应该像这样使用:Math.pow(),而不是创建的 Math 对象的方法。
另外我们定义的sum是int型整数,所以要将Math.pow()的返回值强转为int型。
总结:
观察代码段
g=i/1%10;//个位数字 s=i/10%10;//十位数字 b=i/100%10;//百位数字
我们不难推出将一个整数i的各位拆分的一般方法:
x 位上的数 =i / 10x % 10
当x为个位时 x = 0,当x为十位时 x = 1,当x为百位时 x = 2…………
依此类推。
以上内容是我自己总结出来的,表述可能不是很严谨或者规范,欢迎大家指正!
拓展:
其实题目中所描述的这样“特殊的数字 ”,有一个专有的名称叫“水仙花数”。
定义:
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数等等。水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。
附:其他位数的自幂数名字
一位自幂数:独身数
两位自幂数:没有
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数
常见水仙花数
三位的水仙花数共有4个:153,370,371,407;
四位的四叶玫瑰数共有3个:1634,8208,9474;
五位的五角星数共有3个:54748,92727,93084;
六位的六合数只有1个:548834;
七位的北斗七星数共有4个:1741725,4210818,9800817,9926315;
八位的八仙数共有3个:24678050,24678051,88593477
…………