使得 x^x 達到或超過 n 位數字的最小正整數 x 是多少?
乙個正整數 n
使得 x^x 達到 n 位數字的最小正整數 x
n <= 2000000000 (2e9)
看到如此之大的資料範圍,顯然強行計算x^x的位數是不現實的,不僅需要高精度,而且效率極低。題目的核心在於如何計算x^x的位數,可以利用對數的方法,log10(x)就是x的位數。
也就是 log10(x ^ x) >= n - 1
如此判定方法就是簡單了,**形式就是 x * log(x) / log(10)(換底公式) >= n - 1
求最小,很明顯是二分搜尋,二分套乙個判斷函式就完成了此題。
// skq_liao
#include using namespace std;
#define for(i, a, b) for (register int i = (a), i##_end_ = (b); i < i##_end_; ++i)
#define rof(i, a, b) for (register int i = (a), i##_end_ = (b); i > i##_end_; --i)
#define debug(...) fprintf(stderr, __va_args__)
const int maxn = 1000000000;
bool countfigure(long long x, int n)
void binarysearch(int l, int r, int n)
else
l = mid + 1;
} printf("%d\n", ans);
return ;
}int main()
此題的核心就是判斷位數,碰到一次後就沒有任何難度了。skq_liao 2017/06/29 18 : 05 於209
奇怪的函式 題解
使得 x x 達到或超過 n 位數字的最小正整數 x 是多少?乙個正整數 n 使得 x x 達到 n 位數字的最小正整數 x n 2000000000 2e9 看到如此之大的資料範圍,顯然強行計算x x的位數是不現實的,不僅需要高精度,而且效率極低。題目的核心在於如何計算x x的位數,可以利用對數的...
P2759 奇怪的函式 題解
csdn同步 原題鏈結 前置知識 二分,對數。簡要題意 求 x x 的位數超過或達到 n 位的最小的 x n leq 2 times 10 9 首先,x x 與 x 是正比例關係,具有單調性。樸素來說就是 x x 隨 x 增大而增大,主要因為 x 1 答案不可能是 1 啊 具有單調性的函式可以進行二...
奇怪的函式
題目描述 求出使得x x達到或超過n位數字的最小正整數x是多少。輸入描述 輸入乙個正整數n。輸出資料 輸出使得x x達到或超過n位數字的最小正整數。輸入樣例 11 輸出樣例 10 資料範圍及提示 n 2000000000。源 include include 包含trunc 以及log int n,a...