求助!!!如何计算N!的位数?
就是如何计算N的阶乘的位数,比如:
1!的位数是1
3!的位数是1
32000!的位数是130271
要求一定要用C!
一定要能算到32000的阶乘!

int out(int n)
{
int i;
int count = 0;
unsinged num = 1;
for(i=1;i<=n;i++)
{
num *= i;
}
while(num != 0)
{
count ++;
num /= 10;
}
return count;
}
程序没调试过,错了别怪我。
不过就这思想
[此贴子已经被作者于2006-4-3 20:44:03编辑过]
测试下这个,程序很容易理解
[CODE]
#include <stdio.h>
#include <conio.h>
void main()
{
int a,i;
float mul=1.0;
long count=1;
scanf("%d",&a);
for(i=2;i<=a;i++)
{
mul=mul*i;
while(mul>=10.0)
{
count++;
mul=mul/10;
}
}
printf("%ld\n",count);
getch();
}
[/CODE]
高手啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!
对了
我前一段时间有想过这个问题,自己想了一个算法。不知道对不对。用32000运行结果一致。
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
int i,n;
long bit;
double sum=0;
system("cls");
printf("n=");
scanf("%d",&n);
for (i=1;i<=n;i++)
sum+=log10(i);
bit=sum+1;
printf("bit=%ld",bit);
getch();
}
高手指教。
呵呵
题目没仔细看
斑竹把阶乘和位数,放在了一起计算,这样就防止了数据的溢出。
但是楼上的方法恐怕不行
log10(n!) = log10(1)+log10(2)+...+log(n)
从数学上说这样是没错,可是log10计算出来的是近似值,n小的时候还好。当n很大的时候误差就被放大了。
[此贴子已经被作者于2006-4-4 14:20:24编辑过]