James Bryant

【转】N!的位数

0
阅读(918)
1)Description:

N! (N的阶乘) 是非常大的数,计算公式为:N! = N * (N - 1) * (N - 2) * ... * 2 * 1)。现在需要知道N!有多少(十进制)位。

input:每行输入1个正整数N。0 < N < 1000000

output:对于每个N,输出N!的(十进制)位数。

input:320001000000

output:130271 5565709

2)算法分析:

对于任意一个给定的正整数a, 假设10^(x-1)<=a<10^x,那么显然a的位数为x位,又因为log10(10^(x-1))<=log10(a)<(log10(10^x)) 即x-1<=log10(a)

3)源代码:

#include

#include

int main()

{

int n,i;
double a;
while(scanf("%d",&n)!=EOF)
{
a=0;
for(i=1;i<=n;i++)
{
a=a+(log10(i));
}
printf("%d\n",(int)a+1);
}
}

Baidu
map