这是我写的程序。我执行它时得到一个空白输出。无法弄清楚它有什么问题。
#include <stdio.h>
void main() {
int a, b = 0, s, n;
printf("The armstrong numbers are-");
for (n = 1; n <= 10000; n++) {
s = n;
while (n > 0) {
a = n % 10;
b = b + a * a * a;
n = n / 10;
}
if (b == s)
printf("%d ", s);
}
}
答案 0 :(得分:1)
正如其他人所建议的那样,不要在for循环中更改n
,因为你的循环取决于变量n
。每次迭代都需要将b
设置回0
。
您的程序不太可读,因为其他人可能无法理解a
,b
,n
和s
的含义。因此,请始终使用如下有意义的变量名称:(有关详细说明,请参阅注释)
#include<stdio.h>
int main(void) //correct signature for main function
{
int digit; //instead of a
int sum=0; //instead of b
int number; //instead of n
printf("The armstrong numbers are-");
for(number = 1; number <= 10000; number++)
{
int temporary = number; //temporary integer to store number value
sum = 0; //sum must be reset to 0 at the start of each iteration
while(temporary > 0)
{
digit = temporary % 10;
sum = sum + (digit * digit * digit);
temporary = temporary / 10;
}
if(sum == number) //if sum obtained == number, print it!
printf("%d ",number);
}
return 0;
}
<强>输出:强>
The armstrong numbers are-1 153 370 371 407
答案 1 :(得分:1)
希望我帮助
答案 2 :(得分:0)
循环变量n在循环中被修改。因此,使用临时变量s来执行内部while循环。每次检查新数字时,变量b必须初始化为零。在您使用的块中定义变量是一种很好的做法,而不是全局或在main的开头定义所有内容。
#include <stdio.h>
int main() {
int n;
printf("The armstrong numbers are-");
for (n=1; n<=10000; n++) {
int a, b=0, s=n;
while (s > 0) {
a = s % 10;
b = b + (a*a*a);
s = s / 10;
}
if (b == n)
printf("%d ", n);
}
}