C计划将阿姆斯特朗数字列为1000

时间:2015-11-07 06:25:07

标签: c

#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。我得到的输出是一个零列表。我无法在代码中找到错误。在此先感谢:)

2 个答案:

答案 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;
  }