题目:
1000!有几位数,为什么?
解答思路:
2568位
求多个数相乘的位数只要求它的常用对数和就可以。
设一个数为X,用科学计数法表示为X=a*10^b,其中1<a<10,b为整数,则X有1+b位数
例如:2021 = 2.021 * 10 ^ 3, 有3 + 1 = 4位数
求1000!有几位,此问题转化成求lg(1000!)+1的值。
lg(1000!)=lg(1000*999…*1)=lg(1000)+lg(999)+…+lg(1)
代码求位数:
#include <stdio.h>
#include <math.h>
int main()
{
double sum = 0.0;
for (int i = 1000; i >=1; i--)
{
sum += log10(i);
}
printf("%d\n", (int)sum + 1); //结果为2568
return 0;
}