给一个数N,求N的阶乘的位数。
求一个大数的位数可以这样来求:
x*y的位数表示为log10(x*y)=log10(x)+log10(y)+1;
注意log10(m);这个函数的参数和返回值的类型都是double
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
while(N--)
{
int m;
double sum=0;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
sum+=log10((double)i);
}
printf("%d\n",(int)sum+1);
}
}
return 0;
}
这个题目要注意其中的一些强制转换。没有的话程序会报错。