首页 > 代码库 > hdu1018(数位)
hdu1018(数位)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1018
题意:求n!的数位(即n!有多少位);
思路:对于一个数x,它的数位ans=log10(x);
证明:假设pow(10, y-1) <= x < pow(10, y)-----1,显然有ans(x)=y;
由1式可得 y-1 <= log10(x) < y;
所以 ans(x) = (int) log10(x) + 1;
此题中代入 x = n! = 1*2*3....*n, 可得 ans(n!) = (int)log10(n!)+1 = (int)log10(1*2*3...*n)+1 = int ( log(10)1 + log10(2) + log10(3) + ... + log10(n) ) + 1;
代码:
1 #include <iostream>
2 #include <stdio.h>
3 #include <math.h>
4 #define ll long long
5 using namespace std;
6
7 int main(void){
8 int t;
9 while(~scanf("%d", &t)){
10 while(t--){
11 int n;
12 double cnt=0;
13 scanf("%d", &n);
14 for(int i=1; i<=n; i++){
15 cnt+=log10(i);
16 }
17 ll ans=cnt+1;
18 printf("%lld\n", ans);
19 }
20 }
21 return 0;
22 }
hdu1018(数位)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。