【題目描述】
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;
}