public static void main(String[] args) { // 水仙花数 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); } } }这个代码正确吗
时间: 2024-01-18 13:02:55 浏览: 25
这段代码是用来计算水仙花数的,基本上是正确的。但是,有一个小问题,就是在计算水仙花数时,数据类型使用了 long 类型。实际上,计算水仙花数不会出现 long 类型的数据,因此使用 int 类型即可。
另外,还有一点需要注意的是,在计算 Math.pow(tmp % 10, count) 时,需要将 tmp % 10 强制转换为 double 类型,否则会出现精度问题。所以,这段代码可以稍微修改一下:
```
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int i = 1; i <= num; i++) {
int count = 0;
int tmp = i;
while (tmp > 0) {
count++;
tmp = tmp / 10;
}
tmp = i;
int sum = 0;
while (tmp != 0) {
sum += Math.pow((double)(tmp % 10), count);
tmp /= 10;
}
if(sum == i) {
System.out.println(i);
}
}
}
```
这样修改后,这段代码就可以正确地计算水仙花数了。