【C语言】输出100~999之间的所有“水仙花数”

  “水仙花数”
  “水仙花数”又称为“阿姆斯特朗数”。如果一个n(n≥3)位数的各位数字的n次幂之和等于该数本身,则该数称为“水仙花数”。如:153=1³+5³+3³。
  问题:输出100~999之间的所有“水仙花数”。
  实现思路:
  根据“水仙花数”的特点分析不难发现,只要拿到某个三位数(定义一个变量m,初始值设为100)的各位数字,再进行判断它们的立方和是否等于m,若等于,则输出m,否则,m自增1。上述过程是一个循环,只要m<=999,循环继续执行。
  下面讨论m的各位数字如何获得。首先需要定义三个变量i,j,k,分别记录m的各位数字。
  对于一个三位数m,其百、十、个位数字为i,j,k,则可知:i *100+j *10+k *1=m
  百位数(i):因为m为一个三位数,所以m/100等于其百位数字。
  十位数(j):若对m有m/10,则可以得到m的百位和十位组成的一个两位数,如:123/10=12。再用这个两位数减去i*10,便得到了十位数字j。
  个位数(k):上面已经得到m的百位和十位,易得个位数为m-i*100-j *10。
  程序代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int i, j, k;
    int m = 100;
    while (m<=999)
    {
        i = m / 100;
        j = m / 10 - i * 10;
        k = m - 100 * i - 10 * j;
        if (m == i*i*i + j*j*j + k*k*k)
            printf("%d\n", m);
        m++;
    }
    system("pause");
    return 0;
}

  输出结果:
  这里写图片描述
  于是,100~999范围内(三位数中)的“水仙花数”得到:153,370,371,407。
  注:此题也可以用for循环来实现

猜你喜欢

转载自blog.csdn.net/Sunshine_R9H15Chen/article/details/78507526