100!有多少位十进制数
【题目描述】
100!有多少位十进制数
分析:100!结果很大,我们不能直接算出(c/c++是不行的)它的结果然后再模10,来看它有多少位十进制数。
类似题目:[蓝桥杯2016决赛]阶乘位数
【通过建模看规律】
向下取整:类型强转(高到低)
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;
}