题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1018
解题报告:输入一个n,求n!有多少位。
首先任意一个数 x 的位数 = (int)log10(x) + 1;
所以n!的位数 = (int)log10(1*2*3*.......n) + 1;
= (int)(log10(1) + log10(2) + log10(3) + ........ log10(n)) + 1;
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 const int maxn = 100000+5; 9 double ans[maxn]; 10 11 double dabiao(int n) 12 { 13 double temp = 0; 14 for(int i = 1;i <= n;++i) 15 temp += log10((double)i); 16 return temp; 17 } 18 int main() 19 { 20 int T,n; 21 scanf("%d",&T); 22 while(T--) 23 { 24 scanf("%d",&n); 25 printf("%d\n",(int)dabiao(n) + 1); 26 } 27 return 0; 28 }
HDU 1018 Big Number (数学题)
时间: 2024-10-25 18:33:17