文章目录
一、问题描述
一个正整数如果等于组成它的各位数字的阶乘之和,则该正整数称为阶乘和数。例如正整数145,1!+4!+5!等于145,因此145就是一个阶乘和数。输入一个正整数,计算它的各位数字的阶乘之和,并判断它是否是一个阶乘和数。注意:输入的正整数,以及组成它的各位数字的阶乘之和都不会超过int类型的表示范围,并且输入的正整数的最高位不为0。
【输入形式】
从控制台输入一个正整数。
【输出形式】
先输出输入的正整数和一个逗号“,”,并从个位开始输出组成该正整数的各位数字的阶乘相加形式,然后输出等号“=”;和各位数字阶乘之和,最后在下一行输出字符串“Yes”;表示该正整数是阶乘和数,否则输出字符串“No”;表示该正整数不是阶乘和数。
【输入样例1】
145
【输出样例1】
145,5!+4!+1!=145
Yes
【输入样例2】
1400
【输出样例2】
1400,0!+0!+4!+1!=27
No
【输入样例3】
4
【输出样例3】
4,4!=24
No
【样例说明】
样例1中输入的正整数为145,组成它的各位数字的阶乘之和为145,所以145为阶乘和数。样例2中输入的正整数为1400,组成它的各位数字的阶乘之和为27,所以1400不是阶乘和数。样例3中输入的正整数为4,组成它的只有一位数字,其阶乘为24,也不是阶乘和数。
二、代码实现
import java.util.Scanner;
class jiecheng
{
public int jie(int n)//阶乘
{
int k=1;
for(int i=1;i<=n;i++)
{
k=k*i;
}
return k;
}
public void print(String str)//这个地方比较综合
{
int num=Integer.parseInt(str);//输入的时候是字符型,把它转换成整型
int count=0;//计数用的
String strings="";//为了写那个5!+4!+1!=145 创建的
while(num!=0)
{
int a=num%10;
num=num/10;
count+=jie(a); //逆序输出的 5 4 1 然后把它弄成阶乘 再相加
if(num==0)
{
strings+=(a+"")+"!"+"="+(count+"");
}
else
{
strings+=(a+"")+"!"+"+";
}
}
int num1=Integer.parseInt(str);//题目判读
if(count==num1)
{
System.out.println(num1+","+strings);
System.out.print("Yes");
}
else
{
System.out.println(num1+","+strings);
System.out.print("No");
}
}
}
public class test14 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
jiecheng j=new jiecheng();
j.print(str);//最终输出
}
}
总结
这个题目主要是运用了阶乘的求法 还有一个数字逆序输出,就是这两个简单的部分,难度不大。