天天看點

計蒜客 2019 藍橋杯省賽 A 組模拟賽(一) A

  • 題目連結: https://nanti.jisuanke.com/t/A2221
  • 題意 :輸出一個n,滿足n!的位數 >= 10000
  • 思路 :這裡涉及到一個知識點,x的位數 n = log10(x) + 1。當然是向下取整。是以隻要模拟就可以了。
  • 代碼:
#include "bits/stdc++.h"
#define fori(i,l,u) for(int i = l;i < u;i++)
#define forj(j,l,u) for(int j = l;j < u;j++)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn = 1e5;
int main(int argc, char const *argv[]) {
    double x = 0;
    for (int i = 1;; i++) {
        x += log10(i);
        if (x >= 9999) {
            cout<<i<<endl;
            break;
        }
    }
    return 0;
}

           
  • 反思 :

    (1)判斷一個正整數的位數時,隻有大一剛學c語言的孩子才會不停地模10. 隻需要 log10(x)+1即可。

    (2)看到階乘時,數位肯定很大,第一反應就是取對數。再結合定理,很簡單做出來。