用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
的含义。因此,请始终使用有意义的变量名,如下所示:(有关详细说明,请参阅注释)
希望我能帮忙循环变量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);
}
}