码题集新手村强数
强数是各位数字的阶乘和等于原始数的数,输入一个数字N,检查它是否为强数。
是则输出YES,否则输出NO。
比如145,1!+4!+5!=145
考察两个点
怎么实现阶乘
我们想到两种方式
循环实现
#include <stdio.h>
int main()
{
int n = 1,i,t;
scanf("%d", &t);
for (i = 1; i <= t; i++)
{
n = n * i;
}
printf("%d", n);
}
也可以通过递归实现
#include <stdio.h>
int jc(int n)
{
if (n<=1)
{
return 1;
}
return n * jc(n - 1);
}
int main()
{
int t,i;
scanf("%d", &t);
printf("%d", jc(t));
}
第二个问题是怎么把数字的各个位数剥离出来
任意给出一个三位数为例子
我们要得到它的个位
只要将它除以十得到的余数就是个位
接下来我们再将这个数字除以十
以同样的除以十的余数来得到三位数的十位数
循环该操作就可以得到各个位置上的数值
得到这些准备知识
我们来完成最后的代码的编写
#include<stdio.h>
int jiecheng(int n)
{
if(n<=1)
return 1;
return n*jiecheng(n-1);
}
int main()
{
int i,j=0;
scanf("%d",&i);
int count=i;
while(i!=0)
{
j+=jiecheng(i%10);
i/=10;
}
if(count==j)
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
此题结束
我们现在在一个区间内来寻找我们的强数
代码如下
#include<stdio.h>
int jc(int n)
{
if(n<=1)
return 1;
return n*jc(n-1);
}
int main()
{
int i,j=0,n,count;
scanf("%d%d",&i,&n);
for(i;i<=n;i++)
{
count=i;
while(count!=0)
{
j+=jc(count%10);
count/=10;
}
if(i==j)
{
printf("%d ",i);
}
count=i;
j=0;
}
return 0;
}
这里最重要的地方就是我们要记得把循环内使用过的量重新赋值
否则会影响下一次循环的进程
导致自己不知道程序哪里出现了错误