我找到了所有这些数字,但我不明白为什么在我的代码中,循环的方向决定了一切,当他从9999到100时,他不会计算小于1000的数字,而当循环从100到9999时,一切从头到尾都会工作……可以工作的代码:
public class Main {
public static void main(String[] args){
int n , po = 0, count = 0;
double arm;
int[] elems = {0,0,0,0};
for(int i = 100; i < 9999; i++){
for( n = i;n >= 1; count++){
elems[count] = n%10;
n /= 10;
po++;
}
arm = pow(elems[0],po)+pow(elems[1],po)+pow(elems[2],po)+pow(elems[3],po);
if(arm == i ){
System.out.println(i);
}
po = 0;
count = 0;
}
}
}
输出:
153
370
371
407
1634
8208
9474
和不起作用的代码:
public class Main {
public static void main(String[] args){
int n , po = 0, count = 0;
double arm;
int[] elems = {0,0,0,0};
for(int i = 9999; i > 100; i--){
for( n = i;n >= 1; count++){
elems[count] = n%10;
n /= 10;
po++;
}
arm = pow(elems[0],po)+pow(elems[1],po)+pow(elems[2],po)+pow(elems[3],po);
if(arm == i ){
System.out.println(i);
}
po = 0;
count = 0;
}
}
}
输出:
9474
8208
1634
如你所见,不同之处只在于循环的方向。为什么会发生这种情况?
发布于 2018-10-05 04:18:46
新增: Arrays.fill(elems,0);
public static void armstrong() {
int n , po = 0, count = 0;
double arm;
int[] elems = {0,0,0,0};
for(int i = 9999; i > 100; i--){
for( n = i;n >= 1; count++){
elems[count] = n%10;
n /= 10;
po++;
}
arm = pow(elems[0],po)+pow(elems[1],po)+pow(elems[2],po)+pow(elems[3],po);
if(arm == i ){
System.out.println(i);
}
//added
Arrays.fill(elems, 0);
po = 0;
count = 0;
}
}
发布于 2018-10-05 04:01:18
对于i < 1000
,并不是所有的elems
元素都会被覆盖,因此在计算arm = pow(...
时会保留以前的内容。
也为外部for
-loop的每个迭代重置elems
。
https://stackoverflow.com/questions/52654171
复制相似问题