首页 > 技术文章 > 100!有多少位十进制数

lwtyyds 2021-09-08 21:13 原文

【题目描述】

100!有多少位十进制数

分析:100!结果很大,我们不能直接算出(c/c++是不行的)它的结果然后再模10,来看它有多少位十进制数。

类似题目:[蓝桥杯2016决赛]阶乘位数

【通过建模看规律】

image

向下取整:类型强转(高到低)

double a = 3.7;

int b = (int)a;

那既然讲到向下取整,那么就有向下取整(四舍五入)—— + 0.5 即可

【总结】:

整数 m 在 k 进制下的位数为: ⌊ l o g k (m) ⌋ + 1 根据对数计算公式 l o g a (c ∗ d) = l o g a(c) + l o g a (d) 因此使用一个单重循环既可实现。

其它进制位数只需将底数换成对应位数即可

    double a = 3.1; // 3
    double a = 3.7; // 4
    int b = (int)(a+0.5); //向下取整
    cout<< b;

【参考代码】

#include<iostream>
#include<cmath>

using namespace std;
 
int main()
{   
    double a = 0;
    for(int i = 1; i <= 100 ; i++)
    {
        a += log10(i);
    }
    
    int b = (int)a + 1; //向下取整
    cout<< b;
    
 
    return 0;
}

推荐阅读