比如是1000!
double sum=0;
那就是for(i=1;i<=1000;i++)
{
sum+=log10(i);
}
printf("%ld\n",(long)sum+1);
----------------解决方案--------------------------------------------------------
这个是加法
sum+扩展的一种,可以把sum+=函数(i),归纳可以得到很多种的。
关键看平时的积累了。
----------------解决方案--------------------------------------------------------
[QUOTE]double sum=0;
for(i=1;i<=1000;i++)
{
sum+=log10(i);
}
printf("%ld\n",(long)sum+1);[/QUOTE]
相当简洁!
----------------解决方案--------------------------------------------------------
好方法,不需要算阶乘
----------------解决方案--------------------------------------------------------
本人数学要有待提高才行。
----------------解决方案--------------------------------------------------------
为什么啊?
可不可以从数学角度证明一下
----------------解决方案--------------------------------------------------------
[QUOTE]为什么啊?
可不可以从数学角度证明一下
[/QUOTE]
对数运算法则:
设有一函数 Y=X×(X-1);
两边取(常用)对数:
lgY=lg(X*(X-1)=lgX+lg(X-1).
----------------解决方案--------------------------------------------------------
然后呢?
----------------解决方案--------------------------------------------------------
我来说明一下.对一个数的阶乘的位数.可以用log10()来求和是这样的.
我们都知道有这样的公式log10(X*Y)=log10(X)+log10(Y).
那很显然log10(1*2*3*4...*n)=log10(1)+...log10(n)了.
再证一个数的位数=(long)log10(n)+1.
我们都知道log10()是对10取对数,即假设有一个整数n,则log10(10^x)-(long)log10(n)=1成立,(这里x表示为n的位数.)
故x=(long)log10(n)+1;(这里只限于对log10()运算取整成立.)
----------------解决方案--------------------------------------------------------
等效思想.
----------------解决方案--------------------------------------------------------