zoukankan      html  css  js  c++  java
  • HPU 1166: 阶乘问题(一)

    1166: 阶乘问题(一) [数学]

    时间限制: 1 Sec 内存限制: 128 MB

    提交: 58 解决: 24 统计

    题目描述

    小H对阶乘!很感兴趣。现在他想知道N!N!的位数,由于NN太大了,所以请了你这个BestCoder来帮忙。

    输入

    第一行输入一个整数TT,代表有TT组测试数据。

    每组数据输入一个整数NN

    注:1<=T<=10,1<=N<=21061<=T<=10,1<=N<=2∗106

    输出

    对每组数据,输出N!N!的位数。

    样例输入

    2
    100
    1000

    样例输出

    158
    2568

    方法一:利用斯特林公式   n! approx sqrt{2pi n}\, left(frac{n}{e}
ight)^{n}.

    #include<cstdio>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #define Pi acos(-1)
    #define e exp(double(1))
    using namespace std;
    int main()
    {
    	int t,n,sum;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		sum=floor(log10(sqrt(2*Pi*n))+n*log10(n/e))+1;
    		//floor()向下取整。即取不大于x的最大整数 
    		if(n==1) sum=1;
    		cout<<sum<<endl;
    	}
    	return 0;
    }

    方法二:无视公式,暴力

    log10(n!)log10(n!) 
    =log10(123n)=log10(1∗2∗3…∗n) 
    =log10(1)+log10(2)++log10(n)

    #include<cstdio>  
    #include<cmath>  
    int main()  
    {  
        int n,i,t;  
        double d;  
        scanf("%d",&t);
        while(t--)
        {  
            scanf("%d",&n);  
            for(i=1,d=0;i<=n;i++) d+=log10(i);
            printf("%d
    ",(int)d+1);
        }  
        return 0;
    }  


  • 相关阅读:
    Console
    在IOS10系统中无法定位问题
    c# js 时间
    ConcurrentDictionary,ConcurrentStack,ConcurrentQueue
    转 控件拖动 未验证
    消息处理模拟点击
    C ProcessAsUser
    SessionChange
    installer
    mysql主从同步配置
  • 原文地址:https://www.cnblogs.com/Friends-A/p/9309028.html
Copyright © 2011-2022 走看看