问题:
确定数字阶乘中的数字位数。
输入:
输入由几行整数组成。第一行包含一个整数n,它是要测试的案例数,其后是n行,每行一个整数1≤n≤10^7.
输出:
输出包含出现在输入中的整数的阶乘中的位数。
样例输入:
2
10
20
样例输出:
7
19
注释:
任意a属于正整数,a的位数: (int)log10(a) + 1;
假设10(x-1)<=a<10x,所以a的位数为x,
因为: log10(10(x-1))<=log10(a)<(log10(10x))
x-1<=log10(a)<x
(int)log10(a)=x-1,
(int)log10(a)+1=x
所以, a的位数是 (int)log10(a)+1
#include <stdio.h>
#include <math.h>
int main()
{
double n, a, i, f, count;
scanf("%lf", &n);
while (n--)//此处用n--个人感觉比for (i = 1; i <= n; i++)来的方便简单.
{
scanf("%lf", &a);
count = 0;
for (i = 1; i <= a; i++)
{
count += (log10(i));
}
printf("%d\n", (int)count+1);
}
return 0;
}