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>
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; }