题目描述
输入一个正整数n。输出n!的最高位上的数字。
输入
输入一个正整数n(n不超过1000)。
输出
输出n!的最高位上的数字。
样例输入
1000
样例输出
4
提示
注意double类型溢出问题。
就一般情况来说,求阶乘的最高位用for循环求阶乘然后求其阶乘的位数,最后求余,这样的话太麻烦了,所以就用while循环求阶乘,这样的话会使代码更简便。
#include<stdio.h>
#include<math.h>
int main()
{
int n;
double s=1;
scanf("%d",&n);
while(n!=1)
{
s=s*n;
while(s>=10)
{
s=s/10;
}
n--;
}
printf("%.0lf",s);
}
while(n!=1){
s=s*n//是求阶乘
n--;//是没循环一次n减一次1直到n为1不再循环
}
中间的while循环即为求最高位的代码
一边求阶乘一边当s大于等于10的数取位