好的,请放轻松。刚刚学习 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/