Description
给出一个整数,确定这个数的阶乘的位数。
Input
多组数据,每行为一个大于等于1且小于等于107的整数n.
Output
对应每个输入数据输出一个结果。
Sample Input
Original | Transformed |
10 20
10[EOL] 20[EOL] [EOF]
Sample Output
Original | Transformed |
7 19
7[EOL] 19[EOL] [EOF]
题解
#include<stdio.h> #include<math.h>
int main() {
int n; while (scanf("%d", &n)!=EOF) { int i; double sum=0; for (i = 1; i <= n; i++) { sum += log10(i); } printf("%d\n", (int)sum + 1);
}
return 0; }
对于这题,这个做法足够了,
当然,这题还有更好的算法
#include<stdio.h> #include<math.h> #define PI 3.14159265 int main() { int n; while (scanf("%d", &n)!=EOF) { int i; double sum=0; sum = (n*log(n) - n + 0.5*log(2 * n*PI))/log(10); printf("%d\n", (int)sum + 1); } return 0; }