题目描述
输入一个正整数n。输出n!的最高位上的数字。
输入
输入一个正整数n(n不超过1000)。
输出
输出n!的最高位上的数字。
样例输入
1000
样例输出
4
提示
注意double类型溢出问题。
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
double s = 1;
while (n != 1)
{
s *= n;
while (s > 10)
{
s = s / 10;
}
n--;
}
printf("%.0lf", s);
return 0;
}
这里的提示是注意类型溢出,因为1000的阶乘实际上是比double能表示的最大数还要大的。那么如何处理这个就是本题目的关键。关于影响结果的是最高位数字,可以举例子1000*999,如果不看结果是999000,后面的几位数字不会对最高位产生影响。