用C写一个程序来打印从1到10000的阿姆斯特朗数

用C写一个程序来打印从1到10000的阿姆斯特朗数,c,C,这是我写的程序。我在执行时得到一个空白输出。我想不出有什么问题 #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;

这是我写的程序。我在执行时得到一个空白输出。我想不出有什么问题

#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);
}
}
#包括
void main(){
int a,b=0,s,n;
printf(“阿姆斯特朗编号为-”);
对于(n=1;n0){
a=n%10;
b=b+a*a*a;
n=n/10;
}
如果(b==s)
printf(“%d”,s);
}
}

正如其他人所建议的,不要在for循环中更改
n
,因为您的循环取决于变量
n
。每次迭代都必须将
b
设置回
0

您的程序可读性不强,因为其他人可能不理解
a
b
n
s
的含义。因此,请始终使用有意义的变量名,如下所示:(有关详细说明,请参阅注释)

  • 不要在for循环中更改n
  • 每n必须将b设置回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);
        }
    }
    
    #包括
    int main(){
    int n;
    printf(“阿姆斯特朗编号为-”);
    对于(n=1;n0){
    a=s%10;
    b=b+(a*a*a);
    s=s/10;
    }
    如果(b==n)
    printf(“%d”,n);
    }
    }
    
    以n=1遍历循环。您是否看到问题?n将因
    n=n/10
    而更改。for循环变量为n,您正在while循环中修改n。这就是问题所在。@SumitTrehan我尝试修改s而不是n,现在它只打印“阿姆斯特朗数字是-”。谢谢。我完全没有意识到必须重新设置b的值,非常感谢你的建议。我现在明白了。@Cherubim 1634也是阿姆斯特朗的数字。你们的逻辑只适用于三位数。我有一个疑问,1634怎么是阿姆斯特朗数?据我所知,1634=1*1*1+6*6+3*3+4*4*4=1+216+27+64=308。你能解释一下这里的逻辑吗@维尼特感谢这个建议。我有一个习惯,一开始就宣布一切。“我想我需要改变这一点。”“我接受这个答案
    The armstrong numbers are-1 153 370 371 407 
    
    #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);
        }
    }