Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
JavaScript 中,有一個特殊的數據類型BigInt,它可以存儲非常大的整數,甚至可以存儲超過 2 的 32 次方的所有整數。
BigInt是一種無符號整數類型,它可以表示任何正整數,包括無限大和無限小。JavaScript 中的BigInt使用二進制表示法,因此它的值是無限的,并且永遠不會溢出或產生舍入誤差。
要創建BigInt對象,可以使用Number.bigInt方法。例如,以下代碼將創建一個非常大的整數:
let bigInt = Number.bigInt(2**32 + 1);
在這個例子中,2**32 + 1是一個非常大的整數,它可以使用 32 位二進制表示。Number.bigInt方法將返回一個BigInt對象,可以表示這個非常大的整數。
可以用在一個整數字面量后面加 n 的方式定義一個 BigInt ,如:120n,或者調用函數BigInt()。
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
console.log(theBiggestInt, alsoHuge);
// 9007199254740991n 9007199254740991n
超過這個范圍,number類型的數字將會失去精度
Number.MAX_SAFE_INTEGER
// ? 99007199254740991 最大安全整數
Number.MIN_SAFE_INTEGER
// ? -99007199254740991 最小安全整數
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// ? 9007199254740991n
const hugeString = BigInt("9007199254740991");
// ? 9007199254740991n
const hugeHex = BigInt("0x1fffffffffffff");
// ? 9007199254740991n
const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ? 9007199254740991n
typeof 123
// ? 'number'
typeof 123n
// ? 'bigint'
typeof BigInt(123)
// ? ''bigint'
但是BigInt不支持單獨使用運算符+,因為會默認為轉換成Number,這是不允許的。
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
// ? 9007199254740991n
const maxPlusOne = previousMaxSafe + 1n;
// ? 9007199254740992n
const theFuture = previousMaxSafe + 2n;
// ? 9007199254740993n, this works now!
const multi = previousMaxSafe * 2n;
// ? 18014398509481982n
const subtr = multi – 10n;
// ? 18014398509481972n
const mod = multi % 10n;
// ? 2n
const bigN = 2n ** 54n;
// ? 18014398509481984n
bigN * -1n
// ? –18014398509481984n
const expected = 4n / 2n;
// ? 2n
const rounded = 5n / 2n;
// ? 2n, not 2.5n
// 不嚴格相等,嚴格不相等
0n === 0
// ? false
0n == 0
// ? true
// Number 和 BigInt 可以直接比較。
1n < 2
// ? true
2n > 1
// ? true
2 > 2
// ? false
2n > 2
// ? false
2n >= 2
// ? true
// BigInt可以和Number混入數組中進行排序
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
// ? [4n, 6, -12n, 10, 4, 0, 0n]
mixed.sort();
// ? [-12n, 0, 0n, 10, 4n, 4, 6]
對任何 BigInt 值使用 JSON.stringify() 都會引發 TypeError,因為默認情況下 BigInt 值不會在 JSON 中序列化。但是,如果需要,可以實現 toJSON 方法:
BigInt.prototype.toJSON = function() { return this.toString(); }
// 現在可以
JSON.stringify(BigInt(1));
// ? '"1"'
需要注意的是,BigInt對象是不可變的,也就是說,一旦創建,就無法更改其值。如果需要更改BigInt對象的值,必須創建一個新的BigInt對象。
BigInt對象在 JavaScript 中主要用于處理非常大的整數,例如在密碼學和安全方面。
扣 374. 猜數字大小
題目描述
猜數字游戲的規則如下:
你可以通過調用一個預先定義好的接口 int guess(int num) 來獲取猜測結果,返回值一共有 3 種可能的情況(-1,1 或 0):
返回我選出的數字。
示例 1:
輸入:n = 10, pick = 6
輸出:6
示例 2:
輸入:n = 1, pick = 1
輸出:1
示例 3:
輸入:n = 2, pick = 1
輸出:1
示例 4:
輸入:n = 2, pick = 2
輸出:2
提示:
解決方案
方法一:二分查找
記選出的數字為 pick ,猜測的數字為 x 。根據題目描述,若 guess(x)≤0 則說明 x≥pick,否則 x<pick。
根據這一性質我們可以使用二分查找來求出答案 pick。
二分時,記當前區間為[left,right],初始時 left=1,right=n。記區間中間元素為 mid,若有 guess(mid)≤0 則說明 pick∈[left,mid],否則 pick∈[mid+1,right]。當區間左右端點相同時,則說明我們找到了答案,退出循環。
C++
class Solution {
public:
int guessNumber(int n) {
int left = 1, right = n;
while (left < right) { // 循環直至區間左右端點相同
int mid = left + (right - left) / 2; // 防止計算時溢出
if (guess(mid) <= 0) {
right = mid; // 答案在區間 [left, mid] 中
} else {
left = mid + 1; // 答案在區間 [mid+1, right] 中
}
}
// 此時有 left == right,區間縮為一個點,即為答案
return left;
}
};
Java
public class Solution extends GuessGame {
public int guessNumber(int n) {
int left = 1, right = n;
while (left < right) { // 循環直至區間左右端點相同
int mid = left + (right - left) / 2; // 防止計算時溢出
if (guess(mid) <= 0) {
right = mid; // 答案在區間 [left, mid] 中
} else {
left = mid + 1; // 答案在區間 [mid+1, right] 中
}
}
// 此時有 left == right,區間縮為一個點,即為答案
return left;
}
}
C#
public class Solution : GuessGame {
public int GuessNumber(int n) {
int left = 1, right = n;
while (left < right) { // 循環直至區間左右端點相同
int mid = left + (right - left) / 2; // 防止計算時溢出
if (guess(mid) <= 0) {
right = mid; // 答案在區間 [left, mid] 中
} else {
left = mid + 1; // 答案在區間 [mid+1, right] 中
}
}
// 此時有 left == right,區間縮為一個點,即為答案
return left;
}
}
Golang
func guessNumber(n int) int {
return sort.Search(n, func(x int) bool { return guess(x) <= 0 })
}
JavaScript
var guessNumber = function(n) {
let left = 1, right = n;
while (left < right) { // 循環直至區間左右端點相同
const mid = Math.floor(left + (right - left) / 2);
if (guess(mid) <= 0) {
right = mid; // 答案在區間 [left, mid] 中
} else {
left = mid + 1; // 答案在區間 [mid+1, right] 中
}
}
// 此時有 left == right,區間縮為一個點,即為答案
return left;
};
C
int guessNumber(int n) {
int left = 1, right = n;
while (left < right) { // 循環直至區間左右端點相同
int mid = left + (right - left) / 2; // 防止計算時溢出
if (guess(mid) <= 0) {
right = mid; // 答案在區間 [left, mid] 中
} else {
left = mid + 1; // 答案在區間 [mid+1, right] 中
}
}
// 此時有 left == right,區間縮為一個點,即為答案
return left;
}
Python3
class Solution:
def guessNumber(self, n: int) -> int:
left, right = 1, n
while left < right:
mid = (left + right) // 2
if guess(mid) <= 0:
right = mid # 答案在區間 [left, mid] 中
else:
left = mid + 1 # 答案在區間 [mid+1, right] 中
# 此時有 left == right,區間縮為一個點,即為答案
return left
復雜度分析
BY /
本文作者:力扣
聲明:本文歸“力扣”版權所有,如需轉載請聯系。
avaScript
BOM:瀏覽器對象模型
一套操作瀏覽器功能的API
通過BOM可以操作瀏覽器窗口,比如彈出框、控制瀏覽器跳轉、獲取分辨率等
DOM:文檔對象模型
一套操作頁面元素的API
DOM可以把HTML看到是文檔樹,通過DOM提供的API可以對樹上的節點進行操作
接受用戶的輸入
prompt:類似python當中的input;
多行注釋
/*
這是多行注釋
這是多行注釋
/*
變量賦值
var num1; // 聲明變量
var num1 = 1; // 聲明變量并賦值
var num1, num2, num3; // 同時聲明多個變量
數字
判斷一個變量是不是一個數字;
var cce='1';
console.log(isNaN(cce));
// false isNaN的意思就是不是一個數字,那么現在我們給的一個數字就會返回一個false
轉移符
字面量含義\n換行\t制表\b空格\r回車\斜杠
獲取字符串的長度
string.length:獲取string字符串的長度;
var str = '蔡長恩';
console.log(str.length);
// 3
數據類型
獲取變量的類型
typeof(data):獲取變量的類型;
var str = '蔡長恩';
console.log(typeof(str));
// string
數字類型轉換
toString:轉換為string類型;
String():直接轉為字符串類型;
parseInt:直接轉為數字類型;
parseFloat:直接轉為浮點類型;
var num=1;
console.log(typeof String(num)) // 數字轉字符串
// string
console.log(typeof num.toString()) // 數字轉字符串
// string
var num='1';
console.log(typeof parseInt(num))
// number
bool類型轉換
Boolean():轉為bool類型;
注意:結果為false有幾種情況 null undefined '' 0 NaN
*請認真填寫需求信息,我們會在24小時內與您取得聯系。