3

好吧,请放轻松。刚刚学习 C++,首先在这里也提问。我编写了一个程序来列出所有低于 1000 的 Armstrong 数字。虽然我已经阅读了关于自恋数字的 Wikipedia 文章,但我只在寻找 3 位数字。这意味着我只关心数字立方的总和。

它通过执行 1 到 1000 的 for 循环来工作,使用用户定义的函数检查索引变量是否为 armstrong 并打印它。用户定义的函数只需使用一个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

4 回答 4

6

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

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

int t = n;
while (t!=0)
{
    dgt=t%10;
    t=t/10;
    sum+=(dgt*dgt*dgt);
}
if (sum==n)
// ... etc.
于 2013-10-31T14:32:56.880 回答
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

于 2013-11-18T19:20:18.740 回答
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; 
}
于 2013-10-31T14:38:44.090 回答
0

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

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

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

于 2013-10-31T14:32:14.337 回答