大胖的部落格

Just a note

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks

目的:计算n!的位数。
若先计算n!再依次除以10,则当n的值很大时,会溢出。
所以可以通过数学公式先进行转化:

设 n! = x
x / 10^m = y  (1<= y <10)
则m+1为所求。

因为是求位数,所以设y=1,对结果没影响
则x = 10^m = n!
m = log10(n!)
m = log10(n) + log10(n-1) + ...+log10(1)

#include<cmath>
int main()
{    
    
int n = 0;
    
while(cin>>n,n)            //input n, 0 means exit
    {
        
double ret=1.0;        //result
        for(int i=1; i<=n; ++i)
            ret 
+= log10((double)i);
        cout
<<(int)ret<<endl;
    }

    
return 0;
}
posted on 2009-06-29 09:19 大胖 阅读(259) 评论(0)  编辑 收藏 引用 所属分类: Algorithm

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理