zoukankan      html  css  js  c++  java
  • HDU 1018 Big Number (阶乘位数)

    题意:

      给一个数n,返回该数的阶乘结果是一个多少位(十进制位)的整数。

    思路:

      用对数log来实现。

      举个例子 一个三位数n 满足102 <= n < 103

      那么它的位数w 满足 w = lg103 = 3。 因此只要求lgn 向下取整 +1就是位数。然后因为阶乘比如5阶乘的话是5 * 4 * 3 * 2 * 1。位数就满足lg 5 * 4 * 3 * 2 * 1 = lg5 + lg4 + lg3 + lg2 + lg1。用加法就不会超过数字上限。

      当然这是十进制下得。如果是m进制下 ,就把lgn 换成logm(n)就可以了。 logm(n)的表示方法是 lgn / lgm。高中数学的知识。。 这里有个double向下取整精度的问题要注意。转换成int时候,要floor(算出来的位数 + 1e-7) + 1.

      最后得出位数的计算方式为:floor( logm(n) + logm(n - 1) + ...+ logm(1) + 1e-9 ) + 1.

     1 #include <bits/stdc++.h>
     2 #define LL long long
     3 using namespace std;
     4 const int N=1e-7;
     5 int a;
     6 
     7 int second()    //总位数
     8 {
     9     double tmp=0.0;
    10     for(int i=2; i<=a; i++)    tmp+=log10(i);
    11     return floor(tmp+N)+1;
    12 }
    13 int main()
    14 {
    15     //freopen("input.txt", "r", stdin);
    16     int t;
    17     cin>>t;
    18     while(t--)
    19     {
    20         scanf("%d",&a);
    21         printf("%d
    ",second());
    22     }
    23     return 0;
    24 }
    AC代码
  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4604430.html
Copyright © 2011-2022 走看看