c++ - 阿姆斯特朗号码的代码不起作用

标签 c++

好的,请放轻松。刚刚学习 C++,首先也在这里提问。我编写了一个程序来列出所有低于 1000 的阿姆斯壮数字。虽然我已经阅读了关于自恋数字的维基百科文章,但我只是在寻找 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; 
}

最佳答案

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

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

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

关于c++ - 阿姆斯特朗号码的代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19709214/

相关文章:

c++ - 为什么会出现此错误?无法从 <brace-enclosed initializer list> 转换为 'std::vector<>'

c++ - range-v 3's ` partial_sum` 如何不与非拥有引用语义相矛盾?

C++ 更快地进行字符串加法?

c++ - 关于滑动窗口 boost asio tcp async_write

c++ - wstring.find_last_not_of() 将国际字符之后的所有内容都视为空格?

c++ - 哪个更快 : if (bool) or if(int)?

c++ - "most people seriously overuse casts"怎么办?

c++ - 无法将迭代器分配给二元函数中的常量输入 vector

c++ - 使用 mmap 与 fstream 或 fopen 访问二进制文件

c++ - 无法使对象不可复制