标题:请教一个编程题目的解法
取消只看楼主
crystaljing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-19
 问题点数:0 回复次数:6 
请教一个编程题目的解法
求N!算出来的结果有多少位.思路是什么?到底该怎么样求?我的数学功底不好,想了半天还是没什么头绪!,希望各位帮忙指点指点!不甚感激~~~~~~~~~~~~~~~

搜索更多相关主题的帖子: 解法 
2007-07-23 11:13
crystaljing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-19
得分:0 

不是这样的!!我是想问,如果你输入一个数N,算出N!那么N!有多少位.比如输入1,2,3.则输出1.如果再输入32000,则输出130271.
真是不好意思,我没问清楚,还是非常感谢上面的朋友!!


好好享受我的大学生活~~~
2007-07-23 13:06
crystaljing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-19
得分:0 
谢了啊!!!
算法没问题,程序也通的过,但是题目给的范围很大,N的取值是 0 < N < 1000000 (1 million). 所以输入的N较大之后没有结果输出....
我看到这个题目的另一种解法,是一个公式,位数length=log10(2*i*pi)/2+i*log10(i/e);(pi=3.1415926535;e=2.718281828459;),这个程序可以提交成功,但是我不知道是怎么得来的。有没有人知道这个公式的得来或是有比这个更好的算法。。。。。。。。。。。。期待。。。。。。。。。。。。

好好享受我的大学生活~~~
2007-07-23 16:47
crystaljing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-19
得分:0 

第一次兴致勃勃地跑来逛论坛,结果闹了笑话。。。。。,还是怪自己问的不是很清楚,以后会多向大家学习,多多交流!!!!!!


好好享受我的大学生活~~~
2007-07-23 16:53
crystaljing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-19
得分:0 
我试过了!!用long也不行,同学说可能用数组做会好一点!!!
公式中的i就是指输入,输入i=3,就返回length=1;

好好享受我的大学生活~~~
2007-07-24 09:03
crystaljing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-19
得分:0 

呵呵!


好好享受我的大学生活~~~
2007-07-25 14:06
crystaljing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-7-19
得分:0 

做出来了,有两种方法
第一种.int main()
{
int n, i, m ;
double s = 1;
while(cin >> n)
{
m = 0;
s = 1;
for(i = n; i; i--)
{
s *=i;
while(s>=10)
{
s/=10;
m++;
}
}
cout << ++m << endl;
}
return 0;
第二种:
int main()
{
int n, l;
double s;
while(cin >> n)
{
s = 0;
l = 0;
for (int i = 1; i <= n; i++)
s +=log10(i);
l = (int) s;
cout << ++l << endl;
}
return 0;
}
谢谢你们的帮助啊!!


好好享受我的大学生活~~~
2007-07-26 15:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-157419-1-1.html




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

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