好的,请放轻松。刚学习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;
}
答案 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