【问题描述】
一个正整数如果等于组成它的各位数字的阶乘之和,则该正整数称为阶乘和数。例如正整数145,1!+4!+5!等于145,因此145就是一个阶乘和数。输入一个正整数,计算它的各位数字的阶乘之和,并判断它是否是一个阶乘和数。注意:输入的正整数,以及组成它的各位数字的阶乘之和都不会超过int类型的表示范围,并且输入的正整数的最高位不为0。
【输入形式】
从控制台输入一个正整数。
【输出形式】
先输出输入的正整数和一个逗号“,”,并从个位开始输出组成该正整数的各位数字的阶乘(阶乘计算结果)相加的形式,然后输出等号“=”和各位数字阶乘之和,最后在下一行输出字符串“Yes”表示该正整数是阶乘和数,否则输出字符串“No”表示该正整数不是阶乘和数。
【输入样例1】
145
【输出样例1】
145,120+24+1=145
Yes
【输入样例2】
1400
【输出样例2】
1400,1+1+24+1=27
No
【输入样例3】
4
【输出样例3】
4,24=24
No
【样例说明】
样例1中输入的正整数为145,其个位为5,5的阶乘为120,十位为4,4的阶乘为24,百位为1,1的阶乘为1,这些阶乘之和为145,所以145为阶乘和数。样例2中输入的正整数为1400,组成它的各位数字的阶乘之和为27,所以1400不是阶乘和数。样例3中输入的正整数为4,组成它的只有一位数字,其阶乘为24,也不是阶乘和数。
【评分标准】
该题要求判断输入的正整数是否为阶乘和数。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Scanner;
public class Jiec {
public static void main(String[] args) {
jiec t = new jiec();
Scanner scan= new Scanner(System.in);
int q=scan.nextInt();
int n=q;
int i=0,s=0;
System.out.print(q+",");
while(n!=0){
i=n%10;
s+=t.f(i);
n=n/10;
if(n!=0)
System.out.print(t.f(i)+"+");
else
System.out.print(t.f(i)+"=");
}
System.out.println(s);
if(s==q) System.out.println("Yes");
else System.out.println("No");
}
int f(int n){
int s=1;
for(int i=2;i<=n;i++){
s*=i;
}
return s;
}
}