1000的阶乘有多少位------log求和方法

(1)求多个数相乘的位数(N)

1×2×3×……×1000 = 0.xyz × 10(N)    //10(N)表示10的N次冥
两边同时取10的对数:
log10(1) + log10(2) + …… + log10(1000) = log10(0.xyz) + N
M = -1+ N
M= g10(1) + log10(2) + …… + log10(1000)
then
N = M + 1

例如
1×2×3×……×1000的位数=log+log2+log3+……+log1000+1
知道原理编很容易求出阶乘结果的位数:log1+log2+log3+log4+...+logn 取整加1
结果是2568位

 

C++库函数

/*
题目:求1000!的位数

分析:
1×2×3×……×1000 = 0.xyz × 10(N)    //10(N)表示10的N次冥 
两边同时取10的对数: 
log10(1) + log10(2) + …… + log10(1000) = log10(0.xyz) + N 
M = -1+ N
M= log10(1) + log10(2) + …… + log10(1000)
then 
N = M + 1 

例如
1×2×3×……×1000的位数=log+log2+log3+……+log1000+1
知道原理编很容易求出位数的。


C++库函数
double log10(doube x);


*/
#include <iostream>
#include <cmath>
using namespace std;
#define N 1000
int main()
{
  double digit_sum=0;
  int i;
  for(i=1;i<=N;i++)
    digit_sum+=log10(i);
  digit_sum=digit_sum+1;
  cout<<N<<"!的位数为:"<<int(digit_sum)<<endl;
  return 0;
}


 

 

 

 

注:计算机的long类型只能够在25阶乘范围内给出精确的答案

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值