代码不会引发任何错误,但不会提供期望的输出 使用ubuntu执行 但输出未显示单个值 显示的输出如下 Amstrong No从100到10000是 v v v
/* Print Amstrong no from 100 to 10000 */
#include<stdio.h>
#include<math.h>
void main()
{
int orignal,rem,no,result=0,n=0,i;
printf("Amstrong no from 100 to 10000 are\nv\nv\nv\n");
for(i=100;i<=1000;i++)
{
orignal=i;
while(orignal!=0)
{
orignal/=10;
++n;
}
orignal=i;
while(orignal!=0)
{
rem=orignal%10;
result+=pow(rem,n);
orignal/=10;
}
if(result==i)
printf("%d\n",i);
result=0;
n=0;
}
}
答案 0 :(得分:0)
您没有重置n和结果的值。两者都针对每次迭代求和,因此提供了错误的输出。另外,检查范围。
#include<stdio.h>
#include<math.h>
void main()
{
int orignal,rem,no,result=0,n=0,i;
printf("Amstrong no from 100 to 10000 are\n");
for(i=100;i<=1000;i++) //153 is a armstrong number!
{
result=0, n=0; //have to reset for each number
orignal=i;
while(orignal!=0)
{
orignal/=10;
++n;
}
orignal=i;
while(orignal!=0)
{
rem=orignal%10;
result+=pow(rem,n);
orignal/=10;
}
if(result==i)
printf("%d\n",i);
}
}
答案 1 :(得分:0)
所以我尝试运行您的代码,并得到以下输出:
Amstrong no from 100 to 10000 are
v
v
v
371
因此正在输出371
。问题在于,变量n
和result
必须在循环结束时重置,因此您必须:
#include<stdio.h>
#include<math.h>
void main()
{
int orignal,rem,no,result=0,n=0,i;
printf("Amstrong no from 100 to 10000 are\nv\nv\nv\n");
for(i=371;i<=1000;i++)
{
orignal=i;
while(orignal!=0)
{
orignal/=10;
++n;
}
orignal=i;
while(orignal!=0)
{
rem=orignal%10;
result+=pow(rem,n);
orignal/=10;
}
if(result==i)
printf("%d\n",i);
n=0;
result = 0;
}
}
最后的输出(也是正确的输出)是:
Amstrong no from 100 to 10000 are
v
v
v
371
407