| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1907 人关注过本帖
标题:[求助]Turbo-C 求助!如何计算N!的位数?
只看楼主 加入收藏
我靠
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-4-3
收藏
 问题点数:0 回复次数:18 
[求助]Turbo-C 求助!如何计算N!的位数?
求助!!!如何计算N!的位数?
求助!!!如何计算N!的位数?
就是如何计算N的阶乘的位数,比如:
1!的位数是1
3!的位数是1
32000!的位数是130271
要求一定要用C!
一定要能算到32000的阶乘!
搜索更多相关主题的帖子: 位数 阶乘 
2006-04-03 20:31
vancebs
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-4-3
收藏
得分:0 

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


2006-04-03 20:41
我靠
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-4-3
收藏
得分:0 
可是这样算不到32000啊,这个程序最大的难点就是要对于像32000这样大得32000!算不出来的数,能够在不算出32000!的情况下算出结果的位数
2006-04-04 00:38
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

测试下这个,程序很容易理解
[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]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-04-04 02:24
我靠
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-4-3
收藏
得分:0 

高手啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!
对了

2006-04-04 07:33
美丽心情
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-3-27
收藏
得分:0 
对不起,下面的这个循环不是很理解,可不可以请教?
for(i=2;i<=a;i++)
{
mul=mul*i;
while(mul>=10.0)
{
count++;
mul=mul/10;
}
}
为什么要把while循环放在for循环里面呢?


做一名C程序员怎么样?
2006-04-04 10:45
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
先回楼上的。
如果此次循环的i=120,那么至少就要除以两次10才行。

2006-04-04 11:00
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 

我前一段时间有想过这个问题,自己想了一个算法。不知道对不对。用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();
}

高手指教。


2006-04-04 11:02
vancebs
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-4-3
收藏
得分:0 

呵呵
题目没仔细看
斑竹把阶乘和位数,放在了一起计算,这样就防止了数据的溢出。
但是楼上的方法恐怕不行
log10(n!) = log10(1)+log10(2)+...+log(n)
从数学上说这样是没错,可是log10计算出来的是近似值,n小的时候还好。当n很大的时候误差就被放大了。

[此贴子已经被作者于2006-4-4 14:20:24编辑过]


2006-04-04 14:18
我靠
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-4-3
收藏
得分:0 
我来说一句:其实cordier的算法才是精确的,斑竹的算法有误差通不过测试,还是很谢谢斑竹大人的!
2006-04-04 18:37
快速回复:[求助]Turbo-C 求助!如何计算N!的位数?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012902 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved