阿姆斯特朗号码不起作用

时间:2013-10-31 14:28:43

标签: c++

好的,请放轻松。刚学习C ++,首先也在这里提问。我已经写了一个程序来列出1000以下的所有阿姆斯特朗数字。虽然我读过关于自恋数字的维基百科文章,但我只是在寻找3位数字。这意味着我只关心数字立方体的总和。

它通过执行1到1000的for循环来工作,使用用户定义的函数检查索引变量是否为非常强大,如果是,则打印它。用户定义的函数只需使用while循环来隔离数字并将多维数据集的总和与原始数字相匹配即可。如果是,则返回1,否则返回0.

问题是,我在输出中绝对没有数字。只显示void main()中的cout语句,其余为空白。试图尽可能多地调试。编译器是Turbo C ++。代码 -

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

int chk_as(int);//check_armstrong

void main()
{
    clrscr();
    cout<<"All Armstrong numbers below 1000 are:\n";
    for(int i=1;i<=1000;i++)
    {
        if (chk_as(i)==1)
            cout<<i<<endl;
    }
    getch();
}

int chk_as (int n)
{
    int dgt;
    int sum=0,det=0;//determinant
    while (n!=0)
    {
        dgt=n%10;
        n=n/10;
        sum+=(dgt*dgt*dgt);
    }
    if (sum==n)
    {det=1;}
    else
    {det=0;}
    return det; 
}

4 个答案:

答案 0 :(得分:6)

问题是您在方法中动态更改n的值,但是您需要其原始值来检查结果。

添加一个临时变量,比如t。

int t = n;
while (t!=0)
{
    dgt=t%10;
    t=t/10;
    sum+=(dgt*dgt*dgt);
}
if (sum==n)
// ... etc.

答案 1 :(得分:0)

编辑:没关系......这是错误的

while (n!=0)
    {
    dgt=n%10;
    n=n/10;
    sum+=(dgt*dgt*dgt);
    }

这永远运行,因为n永远不会达到0。

答案 2 :(得分:0)

问题是,在循环结束时

while (n!=0)
{
    dgt=n%10;
    n=n/10;
    sum+=(dgt*dgt*dgt);
}

n为0,因此条件if (sum==n)永远不会为真。

尝试类似:

int chk_as (int n)
{
int copy = n;
int dgt;
int sum=0,det=0;//determinant
while (copy!=0)
    {
    dgt=copy%10;
    copy=copy/10;
    sum+=(dgt*dgt*dgt);
    }
if (sum==n)
{det=1;}
else
{det=0;}
return det; 
}

答案 3 :(得分:0)

我在这里给出了查找三位数的阿姆斯特朗号的程序。

阿姆斯特朗号的条件是, 其数字立方体的总和必须等于数字本身。

例如,407作为输入。 4 * 4 * 4 + 0 * 0 * 0 + 7 * 7 * 7 = 407是一个非常强的数字。

#include <stdio.h>

int main()
{
      int i, a, b, c, d;
      printf("List of Armstrong Numbers between (100 - 999):\n");

      for(i = 100; i <= 999; i++)
      {
            a = i / 100;
            b = (i - a * 100) / 10;
            c = (i - a * 100 - b * 10);

            d = a*a*a + b*b*b + c*c*c;

            if(i == d)
            {
                  printf("%d\n", i);
            }
      }  
      return 0;
}

(100 - 999)之间的阿姆斯特朗数列表: 153 370 371 407

参考:http://www.softwareandfinance.com/Turbo_C/Find_Armstrong_Number.html