用于生成Armstrong数字的简单C ++代码

时间:2011-07-19 12:05:45

标签: c++ sequences

以下是我生成Armstrong numbers的简单尝试。但它只输出“1”。什么可能是错的?

#include<stdio.h> 
#include<conio.h> 
#include<iostream.h>

int main() 
{ 
    clrscr();
    int r; 
    long int num = 0, i, sum = 0, temp; 

    cout << "Enter the maximum limit to generate Armstrong number "; 
    cin >> num;
    cout << "Following armstrong numbers are found from 1 to " << num << "\t \n"; 

    for(i=1;i<=num;i++) 
    { 
        temp = i; 
        while( temp != 0 ) 
        { 
            r = temp%10; 
            sum = sum + r*r*r; 
            temp = temp / 10; 
        } 

        if ( i == sum ) {
            cout << i;
            sum = 0; 
        }
    } 

    getch(); 

    return 0; 
}

7 个答案:

答案 0 :(得分:5)

您需要始终在for-i-loop中设置sum = 0

答案 1 :(得分:3)

  

阿姆斯特朗数字:n位数字等于其数字的第n个幂的总和。

从您的代码中

sum = sum + r*r*r;

'r * r * r'不是数字的幂数。

答案 2 :(得分:2)

您可以使用log:

计算n
n = log(i)+1

然后正确计算r^n并在求和中使用它:sum += r^n;。 r * r * r不是计算它的正确方法。

答案 3 :(得分:2)

首先,你假设n(如第n次幂)总是三(在r*r*r中)。只有当您的初始值有三位数时才会出现这种情况(与153示例一样)。

您需要计算初始数字中的数字来计算n,然后将r*r*r替换为将r提升到n次幂。

但这并不能解释为什么没有找到153。原因是您没有将sum重置为零,除非找到匹配项。无论你是否找到匹配,都需要将其重置为零。

答案 4 :(得分:0)

您的代码仅适用于n=3sum = sum + r*r*r;

您必须使用pow()函数(http://www.codecogs.com/reference/c/math.h/pow.php)来计算能力。 (或者创建一个自定义的。)

答案 5 :(得分:0)

总结正确但部分答案:

// #include <math.h>

for (long int i = 1; i <= num; i++) 
{ 
    long int n = 0, sum = 0;  //  <--- here 
    long ing temp = i; 
    while ( temp != 0 ) 
    { 
        ++n;
        temp /= 10; 
    } 

    temp = i; 
    while ( temp != 0 ) 
    { 
        int r = temp%10; 
        sum += int(pow(double(r), n)); // <-- here
        temp /= 10; 
    } 
    if ( i == sum ) 
    {
        cout << i;
        sum = 0; 
    }
} 

答案 6 :(得分:0)

@ Power-inside,我看到你的代码,很难改变你的代码并编辑它,但是我写了一个类似的代码来生成给定限制的Armstrong数字,并且它工作正常。 这是....

  #include<iostream.h>
  #include<conio.h>
    class arm
       {
    int a;
    public:
       void display();
        };
     void arm::display()
          {
             cout<<"Enter any number to find armstrong numbers less than it";
             cin>>a;
              for(int i=a;i>=1;i--)
            {
              int d=i;
              int b=i;
              int c=i;
              int count=0;
                while(b!=0)
                    {
                      b=b/10;
                      count++;
                    }
                   int l,m;
                   m=0;
                for(int k=1;k<=count;k++)
               {
                  l=c%10;
                   c=c/10;
                   m=m+l*l*l;
                }



              if(d==m)

              cout<<d<<"\t";

             }

              }


            void main()
              {
                 arm k;
                 k.display();
                 getch();
                }