解题思路:
首先此题的程序主题为如何将一个三位数的每个数字拆分开,首先想到的是除以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!