java - 在java中查找阿姆斯特朗数
问题描述
我找到了所有这些数字,但我不明白为什么在我的代码中,循环的方向决定了一切 当他从 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
如您所见,差异仅在于循环的方向......为什么会发生这种情况?
解决方案
并非所有elems
元素都被覆盖,因此在评估i < 1000
时保留先前的内容。arm = pow(...
也重置elems
外部循环的每次迭代for
。
推荐阅读
- xsd - 当缺少必需元素时,如何使 JAXB 失败?
- angular - 如果组件不是当前组件,如何删除本地存储 - 角度
- python - 简短描述不适用于删除选定内容(delete_selected.short_description 未更改名称)
- r - purrr::map 和 dplyr 的冗余变量命名问题
- python - ansible 与solidfire for netapp
- tensorflow - 我们可以在统一 mlagents 中使用 PPO 以外的 ML 算法来处理像 ddpg 这样的多代理吗
- python - 从不同的嵌套 JSON 数组中查找重复项
- phoenix - Apache Phoenix SqlLine 配置
- java - 我对生成的战争有疑问,某些 jpa 原生查询不起作用
- c# - 在后台任务中检测 UWP 应用的已关闭通知