#include<stdio.h>
#include<conio.h>
#include<math.h>
void main()
{
int i , n , sum=0, rem;
clrscr();
for(i=1;i<=1000;i++)
{
while(i!=0)
{
rem = i%10;
sum = sum + pow(rem,3);
i = i / 10;
}
if(i == sum)
printf("\n %d", i);
}
getch();
}
我尝试了上面的代码,用于打印高达1000的Armstrong Numbers。我得到的输出是一个零列表。我无法在代码中找到错误。在此先感谢:)
答案 0 :(得分:3)
你应该保留i的副本,以便保存它以与sum变量进行比较。
截至目前,你比较sum和i,在我变为0的每一步。
您应该使用临时变量来存储i的值(在执行i / = 10之前)。
此外,你不能将我保持在while循环中,因为它始终为0,因此后增量对它没有影响。您应该需要另一个临时变量,例如div
。
而且,您应该最终打印temp
。
此外,阿姆斯壮的数字是一个n位数字,等于其数字的第n个幂的总和。
所以,对于1000,你需要计算第四种力量。
int temp,div;
for(i=1;i<=1000;i++)
{
temp = i;
div = i;
while(div!=0)
{
rem = div%10;
sum = sum + pow(rem,3);
div = div / 10;
}
if(temp == sum)
printf("\n %d", temp);
}
注意: - 可能你正在使用Turbo C编译器(检查标题<conio.h>
),你不应该这样做(你应该避免使用它)。您应该使用GCC(在Linux系统上),CodeBlocks IDE(在Windows上)。
答案 1 :(得分:0)
您也可以使用此代码在给定范围内打印阿姆斯壮号码。
#include<stdio.h>
int main()
{
int num,r,sum,temp;
int min,max;
printf("Enter the minimum range: ");
scanf("%d",&min);
printf("Enter the maximum range: ");
scanf("%d",&max);
printf("Armstrong numbers in given range are: ");
for(num=min;num<=max;num++)
{
temp=num;
sum = 0;
while(temp!=0)
{
r=temp%10;
temp=temp/10;
sum=sum+(r*r*r);
}
if(sum==num)
printf("%d ",num);
}
return 0;
}