求一个三位数,该三位数等于其每一位数字的阶乘之和。即 abc = a! + b! +c!

解题思路:
首先此题的程序主题为如何将一个三位数的每个数字拆分开,首先想到的是除以100得到百位数,除以10再减去百位数的十倍得到十位数。然而这样编出的程序过于繁琐,故想到了使用更简洁的语句执行。十位由三位数除10再对10取余数得到十位数;个位数直接对10取余数,这样更加简洁清晰。

难点
本题中要对 a , b , c ,进行阶乘,如果将阶乘的语句直接编写,程序将会变得冗长复杂,并且编写较为困难。因此想到了调用函数的方法

int fun(int i)
{
    int n = 1;
    int s = 1;

    while( n <= i)
    {
         s *= n;
         n += 1;
    }

    return s;
}

这样使得程序变得简洁并且在编写程序是使用更方便。
另外值得注意的是在最后记得加上 “ return s;”返回值运算的结果 s。

通过这一道题,加深了对调用函数的使用方法和注意事项的了解,进一步掌握了简化程序中含有复杂函数运算是的解决办法。

编程如下:

#include <stdio.h>
#include <math.h>

int fun(int i);

int main()
{
    int a,b,c,n;

    for( n = 100; n < 1000; n++)
    {
       a = n/100;
       b = (n/10)%10;
       c = n%10;

       if( n == fun(a)+fun(b)+fun(c) )
  printf(" %4d = %d!+%d!+%d!\n", n,a,b,c);
    }

    return 0;
}

int fun(int i)
{
    int n = 1;
    int s = 1;

    while( n <= i)
    {
         s *= n;
         n += 1;
    }

    return s;   
}

运行结果:

 145 = 1!+4!+5!
    原文作者:Zhoujy1996
    原文地址: https://blog.csdn.net/Zhoujy1996/article/details/71194237
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞