打卡5.4
1.问题描述
如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。例如1^3 + 5^3 + 3^3 = 153
试编程求1000以内的所有阿姆斯特朗数
2.问题分析
其实和水仙花数一样,只需要把每个位置的数分离出来,然后算一下立方和,如果等于原数,就可以输出
3.算法设计
先搞一个数组,然后把三位数分离,依次存入数组,最后算数组每个位置数的立方和。还是用for循环,三位数用三层循环。外层循环k/=10,保证每次k都是上一次的十分之一,我们用从高位到低位的顺序拆分。就像这样
for (int a = 2; a < 1000; a++)
{
for (b = 0, c = 1000; c >= 10; b++)
{
d[b] = (a % c) / (c / 10);
c /= 10;
}
}
4.程序代码
#include<iostream>
using namespace std;
int main()
{
int a, b, c;
int d[3];
for (int a = 2; a < 1000; a++)//先说明a的范围
{
for (b = 0, c = 1000; c >= 10; b++)
{
d[b] = (a % c) / (c / 10);//这里b从0开始,逐渐增大,把每个数存入数组中,
c /= 10;//让c减小 依次求出每个位置上的数
}
if (a == d[0] * d[0] * d[0] + d[1] * d[1] * d[1] + d[2] * d[2] * d[2])//判断是不是阿姆斯特朗数
{
cout << a << endl;//输出
}
}
return 0;
}
5.运行结果



浙公网安备 33010602011771号