如题:http://poj.org/problem?id=1423
while(N--)
{
1.输入n;(1-10^7)
2.输出n的阶乘的位数;
}
首先分析求数X的位数为log10 X下取整+1,C语言中log(10)函数只需包含头文件math.h
log10(n!)=log10(n*n-1*n-2*.....*1)=log10(n)+log10(n-1)+...log10(1);
因为需要输入多组数据,打表比较省时
#include<stdio.h>
#include<math.h>
#define MAXN 10000001
int weishu[MAXN];
int main()
{
double t=0;
for(int i=1;i<10000001;i++)
{
t+=log10(i);
weishu[i]+=(int)t+1;
}
int N;
scanf("%d",&N);
while(N--)
{
int n;
scanf("%d",&n);
printf("%d\n",weishu[n]);
}
return 0;
}