HDU 1018Big Number(大数的阶乘的位数,利用公式)
发布时间:2020-12-14 03:21:08 所属栏目:大数据 来源:网络整理
导读:传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big Number Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 42715????Accepted Submission(s): 20844 Problem Description In many a
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1018 Big NumberTime Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Problem Description
In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data,encryption,etc. In this problem you are given a number,you have to determine the number of digits in the factorial of the number.
?
?
Input
Input consists of several lines of integer numbers. The first line contains an integer n,which is the number of cases to be tested,followed by n lines,one integer 1 ≤ n ≤ 10
7 on each line.
?
?
Output
The output contains the number of digits in the factorial of the integers appearing in the input.
?
?
Sample Input
2
10
20
?
?
Sample Output
7
19
?
?
Source
Asia 2002,Dhaka (Bengal)
?
分析:
问你一个数的阶乘是多少位
n比较大
是大数问题
一开始不知道写
看了一下大佬的博客
?
具体分析;
?一个正整数a的位数等于(int)log10(a) + 1
??? 假设A=n!=1*2*3*......*n,那么我们要求的就是 ??? (int)log10(A)+1,而: ??? log10(A) ??? =log10(1*2*3*......n)? (根据log10(a*b) = log10(a) + log10(b)有) ??? =log10(1)+log10(2)+log10(3)+......+log10(n)
?
code:
#include<bits/stdc++.h> using namespace std; typedef long long LL; #define max_v 105 int main() { /* 一个正整数a的位数等于(int)log10(a) + 1 假设A=n!=1*2*3*......*n,那么我们要求的就是 (int)log10(A)+1,而: log10(A) =log10(1*2*3*......n) (根据log10(a*b) = log10(a) + log10(b)有) =log10(1)+log10(2)+log10(3)+......+log10(n) */ int n,t; scanf("%d",&t); while(t--) { scanf("%d",&n); double sum=0; for(int i=1; i<=n; i++) { sum+=log10((double)i); } printf("%dn",(int)sum+1); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |