奇怪的函式 題解

2021-08-03 05:20:46 字數 1217 閱讀 9243

使得 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...