用 JavaScript 找到最小的優良基底
優良基底
對於整數 num,如果 num 在基數 k(k >= 2)的所有數字都是 1,那麼我們稱 k 為 num 的優良基底。
例如:13 在基數 3 中是 111,因此 3 是 num = 13 的優良基底
問題
要求:編寫一個 JavaScript 函式,該函式將字串 str 作為一個唯一的引數,其中 str 表示一個數字。該函式應返回該字串表示的、作為 str 的優良基底的最小可能數字。
例如,如果輸入函式的值為 −
const str = "4681";
那麼輸出值應為 −
const output = "8";
輸出說明
因為 4681 在基數 8 中是 11111
示例
此程式碼為 −
const str = "4681";
const smallestGoodBase = (n = '1') => {
const N = BigInt(n), bigint2 = BigInt(2), bigint1 = BigInt(1), bigint0 = BigInt(0)
let maxLen = countLength(N, bigint2) // result at most maxLen 1s
const findInHalf = (length, smaller = bigint2, bigger = N) => {
if (smaller > bigger){
return [false];
};
if (smaller == bigger) {
return [valueOf1s(smaller, length) == N, smaller]
};
let mid = (smaller + bigger) / bigint2;
let val = valueOf1s(mid, length);
if(val == N){
return [true, mid];
};
if (val > N){
return findInHalf(length, smaller, mid - bigint1);
};
return findInHalf(length, mid + bigint1, bigger);
};
for (let length = maxLen; length > 0; length--) {
let [found, base] = findInHalf(length);
if(found){
return '' + base;
}
};
return '' + (N - 1);
function valueOf1s(base, lengthOf1s) {
let t = bigint1
for (let i = 1; i < lengthOf1s; i++) {
t *= base
t += bigint1
}
return t
}
function countLength(N, base) {
let t = N, len = 0
while (t > bigint0) {
t /= base
len++
}
return len
}
};
console.log(smallestGoodBase(str));輸出
控制檯中的輸出將為 −
8
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP