HDU1018 http://acm.hdu.edu.cn/showproblem.php?pid=1018
题目大意:
求n的阶乘的位数
解题思路:
首先了解如何求算一个数字的位数,其实很简单。即
digit(n) = ceil(log(n) / log(10)); //这里的log是内置函数
而阶乘恰好可以与对数运算结合成加法。
即将从1 到 n的每个数字都算出位数后加和后向上取整即可。
AC代码:
#include <iostream>
#include <cmath>
using namespace std;
int digit(int n) {
double ans = 0;
for(int i = 1; i <= n; i++) {
ans += (log(i) / log(10));
}
return ceil(ans);
}
int main() {
int t;
cin >> t;
int a;
while(t--) {
cin >> a;
cout << digit(a) << endl;
}
return 0;
}