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

xiaoxiao2021-02-28  180

解题思路: 首先此题的程序主题为如何将一个三位数的每个数字拆分开,首先想到的是除以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); c = n; if( n == fun(a)+fun(b)+fun(c) ) printf(" M = %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!
转载请注明原文地址: https://www.6miu.com/read-18538.html

最新回复(0)