我是Java新手,我正在编写代码来检查数字是否为0到999范围内的阿姆斯壮数字。
请告诉我有什么问题。在命令提示符下运行时,它会重复打印:
1是计数
代码:
import java.util.*;
class Armstrong
{
public static void main (String[] args)
{
int sum = 0;
for (int i = 0; i < 1000; i++)
{
int n = i;
int count =0;
while(n > 0)
{
int mod = n % 10;
n = n / 10;
count++;
}
System.out.println(+count+ "is the count");
for (int j = 1; j < count; j++)
{
int val = i % 10;
i= i / 10;
sum = val * val * val + sum;
}
if (sum == i)
{
System.out.println( +i+ "is an Armstrong number");
}
}
}
}
答案 0 :(得分:2)
阿姆斯壮的数字是一个数字,它是自己的数字之和,每个数字都是数字的幂。
对于初学者,您总是将数字提高到3的幂,因此您的计算只适用于i
和100
之间的999
。
其次,您正在更改内循环中的i
,因此最后if (sum==i)
的比较将失败,因为总和应与原始i
进行比较。
接下来,在sum
的每次迭代中,您都不会将0
重置为i
。
您也可以跳过其中一个数字。
这似乎有效:
int sum = 0;
for (int i = 100; i < 1000; i++) { // start at 100
sum = 0; // clear the sum in each iteration
int n = i;
int count = 0;
while (n > 0) {
int mod = n % 10;
n = n / 10;
count++;
}
n = i;
for (int j = 0; j < count; j++) { // iterate over all the digits
int val = n % 10;
n = n / 10; // don't change i
sum = val * val * val + sum;
}
if (sum == i) {
System.out.println(i + " is an Armstrong number");
}
}
返回:
153 is an Armstrong number
370 is an Armstrong number
371 is an Armstrong number
407 is an Armstrong number
答案 1 :(得分:0)
无需运行三个循环。你可以这样简单:
for(int i = 0; i < 1000; i++) {
int currNumber = i;
int sum = 0;
while(currNumber != 0)
{
int mod = currNumber % 10;
sum = sum + mod * mod * mod;
currNumber = currNumber / 10;
}
if (i == sum) {
System.out.println(i + " is an Armstrong number");
}
}
答案 2 :(得分:-1)
在java中打印Armstrong号码
public class CalculatArmstrong
{
public static void main(String[] args)
{
for(int i=0;i<=2000;i++)
{
int number=i;
int n=number;
int rem;
int arms=0;
while(number>0)
{
rem=number%10;
arms=arms+rem*rem*rem;
number=number/10;
}
if(n==arms)
{
System.out.println(n);
}
}
}
}