Scanner sc = new Scanner(System.in); int num = sc.nextInt(); for (int i = 0; i <= num; i++) { int count = 1; int tmp = i; while (count != 0) { count++; tmp = tmp / 10; } tmp = i; int sum = 0; while (tmp != 0) { sum += Math.pow(tmp % 10,count); tmp /= 10; } if(sum == i) { System.out.println(i); } }这个代码有啥问题
时间: 2024-01-18 17:02:48 浏览: 67
这段代码还是判断每个数是否为阿姆斯特朗数的代码。但是在第一个while循环中,判断条件不正确。当tmp除以10的商为0时,应该停止循环,但是判断条件是count不等于0,这是不正确的。应该改为当tmp大于0时,继续循环,当tmp等于0时,停止循环。修改后的代码如下:
```
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int i = 0; i <= num; i++) {
int count = 1;
int tmp = i;
while (tmp > 0) {
count++;
tmp = tmp / 10;
}
tmp = i;
int sum = 0;
while (tmp != 0) {
sum += Math.pow(tmp % 10,count);
tmp /= 10;
}
if(sum == i) {
System.out.println(i);
}
}
```
这样修改后,就可以正确地判断每个数是否为阿姆斯特朗数了。
相关问题
Scanner sc = new Scanner(System.in); int num = sc.nextInt(); for (int i = 1; i <= num; i++) { int count = 1; int tmp = i; while (tmp > 0) { count++; tmp = tmp / 10; } tmp = i; int sum = 0; while (tmp != 0) { sum += Math.pow(tmp % 10,count); tmp /= 10; } if(sum == i) { System.out.println(i); } }为什么我输入999结果是1
这个问题的原因是,在Java中,当int类型的数值超出了其表示范围时,会发生溢出现象,变成负数。在这段代码中,当i大于等于1000时,count的值会变成负数,从而导致程序输出结果不正确。
解决这个问题的方法是,将count的类型改为long类型,并将count的初始值改为0,然后在while循环中将count的值加1。修改后的代码如下:
```
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int i = 1; i <= num; i++) {
long count = 0;
int tmp = i;
while (tmp > 0) {
count++;
tmp = tmp / 10;
}
tmp = i;
int sum = 0;
while (tmp != 0) {
sum += Math.pow(tmp % 10,count);
tmp /= 10;
}
if(sum == i) {
System.out.println(i);
}
}
```
这样修改后,就可以正确地输出结果了。
Scanner sc = new Scanner(System.in);
这是 Java 中创建一个 Scanner 对象的代码,该对象用于从标准输入读取用户输入的数据。通过将 System.in 传递给 Scanner 构造函数,Scanner 对象可以从控制台接收用户输入。一旦创建了 Scanner 对象,您可以使用它的方法来读取不同类型的输入数据,例如 nextInt()、nextDouble()、next() 等等。例如,要读取一个整数,您可以使用以下代码:
```
int num = sc.nextInt();
```
这将从控制台读取用户输入的整数并将其存储在 num 变量中。
阅读全文