ZZULIOJ题解
1089: 阶乘的最高位
题目描述
输入一个正整数n。输出n!的最高位上的数字。
输入
输入一个正整数n(n不超过1000)。
输出
输出n!的最高位上的数字。
样例输入
1000
样例输出
4
这里的提示是注意类型溢出,因为1000的阶乘实际上是比double能表示的最大数还要大的。那么如何处理这个就是本题目的关键。关于影响结果的是最高位数字,可以举例子1000*999,如果不看结果是999000,后面的几位数字不会对最高位产生影响。
代码
#include<stdio.h>
int main()
{
double s=1;//s要用 double,因为结果要中间结果考虑四舍五入
int a; //定义整型a
scanf("%d",&a);
while(a!=1)//开始循环计算
{
s*=a;
while(s>=10)//当s>=10的时候
{
s/=10;//能够影响结果的只有最高位数字
}
a--;//循环变量递减
}
printf("%d",(int)s);//强制转换,如果是double会四舍五入,所以变成int
}