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编辑过]