打卡5.4

发布时间 2023-05-07 20:02:42作者: /张根源/

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