加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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 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 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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读