样例1中输入的正整数为145,组成它的各位数字的阶乘之和为145,所以145为阶乘和数。样例2中输入的正整数为1400,组成它的各位数字的阶乘之和为27,所以1400不是阶乘和数。样例3中输入的正整数为4,组成它的只有一位数字,其阶乘为24,也不是阶乘和数。
解体思路与易错分析:
这道题的难点在于如何将输入的数分为单个的数字,我采用的方法是先求出输入数字的位数然后在对各个数字进行求阶乘累加求和,当然这里也有对格式的要求你可以采用计数的方法实现对其格式的控制
下面附上我的代码:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int fun(int a)
{
int num = 0;
while(a)
{
a /= 10;
num++;
}
return num;
}
int fun2(int b)
{
int ttl = 1;
for(int i = 1;i <= b; i++)
{
ttl *= 10;
}
return ttl;
}
int fun3(int c)
{
int total=1;
for(int i = 1; i <=c;i++)
{
total *= i;
}
return total;
}
int main()
{
int x,y,z,q,totals=0;
cin >> x;
y = x;
cout << x<<",";
z = fun(x);
while(z)
{
q = x / fun2(z-1);
x = x % fun2(z-1);
totals += fun3(q);
if(z==1)
{
cout << q <<"!";
}
else
{
cout << q << "!+";
}
z--;
}
cout << "=" << totals;
if(totals==y)
{
cout << endl << "Yes";
}
else
{
cout << endl << "No";
}
return 0;
}