Description
输入一个正整数n。输出n!的最高位上的数字。
Input
输入一个正整数n(n不超过1000)。
Output
输出n!的最高位上的数字。
Sample Input
1000
Sample Output
4
HINT
注意double类型溢出问题。
Source
题意概括:输出一个小于或等于1000的数的阶乘
解题思路:
1:因为数非常大,因此要考虑类型溢出的问题。
2:因为是求最高位,所以可以通过除以1000抛掉后面几位,避免类型溢出
错误原因:无,一次通过
经验总结:无。
我的AC代码:
#include<stdio.h>
#include<math.h>
#include<math.h>
int main(void)
{
int n, i,m, t;
double sum = 1.0;
scanf("%d", &n);
for(i = 1; i <= n; i ++)
{
sum *= i;
if(sum >1000000000)
{
sum/= 1000;
}
}
m =(int)log10(sum);
t = sum/(pow(10, m));
printf("%d\n", t);
return 0;
}
{
int n, i,m, t;
double sum = 1.0;
scanf("%d", &n);
for(i = 1; i <= n; i ++)
{
sum *= i;
if(sum >1000000000)
{
sum/= 1000;
}
}
m =(int)log10(sum);
t = sum/(pow(10, m));
printf("%d\n", t);
return 0;
}