打卡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.运行结果