你这个 a b c都是定值了 a=1 b=0 c=0 num的判定永远失败 a b c的赋值应该放到for循环里。 而且得a b c取值也不对,看起来是想要取个位 十位 百位 num%10 num/10%10 num/100%10 个位 十位 百位 剩下应该都没错了。
水仙花数有点数学的算法在里面,2种方式 public class Text { public static void main(String[] args) { for(int i=0;i<10;i++){ for(int j=0;j<10;j++){ for(int l=0;l<10;l++){ //将数字转换成字符串 String str = String.valueOf(i)+String.valueOf(j)+String.valueOf(l); int num1 = Integer.parseInt(str); //Math.pow 数字的三次方 int num = (int) (Math.pow(i,3)+Math.pow(j,3)+Math.pow(l,3)); if(num1==num){ System.out.println(num); } } } } } } /* 这个就是你这样的直接取值的算法了 * // 水仙花数开始 int i, j, k; for (int x = 100; x < 1000; x++) { i = x / * 100; j = (x / 10) % 10; k = x % 10; if (x == i * i * i + j * j * j + * k * k * k) { System.out.println(x + "、"); } * * }
for(int i=1;i<1000;i++){ int sum = 0; int result = 0; for(int j=i;j>0;j=j/10){ sum = j%10; result += sum*sum*sum; } if(result == i){ System.out.println(i); } }
您先给num赋值为100,后面当然按照100的数字算起啦··
public static void main(String[] args) { for (int i = 100; i < 1000; i++) { int n3 = i / 100; int n2 = i / 10 % 10; int n1 = i % 10; if (i == (Math.pow(n3, 3) + Math.pow(n2, 3) + Math.pow(n1, 3))) { System.out.println(i); } } }结果: 153 370 371 407完整代码...楼主参考下吧
a b c的赋值应该放到for循环里。
而且得a b c取值也不对,看起来是想要取个位 十位 百位
num%10 num/10%10 num/100%10
个位 十位 百位
剩下应该都没错了。
public class Text {
public static void main(String[] args) {
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
for(int l=0;l<10;l++){
//将数字转换成字符串
String str = String.valueOf(i)+String.valueOf(j)+String.valueOf(l);
int num1 = Integer.parseInt(str);
//Math.pow 数字的三次方
int num = (int) (Math.pow(i,3)+Math.pow(j,3)+Math.pow(l,3));
if(num1==num){
System.out.println(num);
}
}
}
}
}
}
/* 这个就是你这样的直接取值的算法了
* // 水仙花数开始 int i, j, k; for (int x = 100; x < 1000; x++) { i = x /
* 100; j = (x / 10) % 10; k = x % 10; if (x == i * i * i + j * j * j +
* k * k * k) { System.out.println(x + "、"); }
*
* }
int sum = 0;
int result = 0;
for(int j=i;j>0;j=j/10){
sum = j%10;
result += sum*sum*sum;
}
if(result == i){
System.out.println(i);
}
}
int n3 = i / 100;
int n2 = i / 10 % 10;
int n1 = i % 10; if (i == (Math.pow(n3, 3) + Math.pow(n2, 3) + Math.pow(n1, 3))) {
System.out.println(i);
}
}
}结果:
153
370
371
407完整代码...楼主参考下吧
你这个高级了,但是我不明白Math.pow的用法,你能详细说明下吗?
你这个高级了,但是我不明白Math.pow的用法,你能详细说明下吗?这个一点也高级,Math.pow是求方的静态函数,Math.pow(5,2)是求5的平方,Math.pow(5,2)Math.pow(5,3)是求5的立方.
int num = 100;
for(num=100;num<1000;num++){
int a = num/100;
int b = num%100/10;
int c = num%100%10;
if(num == a*a*a + b*b*b + c*c*c){
System.out.println(num);
}
}
}
}
我试了下把abc放到循环里就好用了,结果153
370
371
407
你这个高级了,但是我不明白Math.pow的用法,你能详细说明下吗?
个人感觉这个代码的高级在于对个十百位数的合理取值。Math.pow(a,a)等同于a的a次方,初学者,有错勿喷