(1)求多个数相乘的位数(N)
例如
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的对数:
log10(1) + log10(2) + …… + log10(1000) = log10(0.xyz) + N
M = -1+ N
then
N = M + 1