我一直試圖計算Golang中的2^100
。我瞭解limit of numeric type並嘗試使用math/big
包。這是我試過的,但我不明白爲什麼它不起作用。計算Golang中的大冪求數
我用computation by powers of two方法來計算冪運算。
package main
import (
"fmt"
"math/big"
)
func main() {
two := big.NewInt(2)
hundred := big.NewInt(50)
fmt.Printf("2 ** 100 is %d\n", ExpByPowOfTwo(two, hundred))
}
func ExpByPowOfTwo(base, power *big.Int) *big.Int {
result := big.NewInt(1)
zero := big.NewInt(0)
for power != zero {
if modBy2(power) != zero {
multiply(result, base)
}
power = divideBy2(power)
base = multiply(base, base)
}
return result
}
func modBy2(x *big.Int) *big.Int {
return big.NewInt(0).Mod(x, big.NewInt(2))
}
func divideBy2(x *big.Int) *big.Int {
return big.NewInt(0).Div(x, big.NewInt(2))
}
func multiply(x, y *big.Int) *big.Int {
return big.NewInt(0).Mul(x, y)
}
的確如此。以兩個'big.Int'作爲參數並沒有什麼意義。我喜歡你的方法。 –
@YeLinAung其實如果在某個時間點你需要大整數,你可以很容易地修改它來做到這一點。我寫這個函數只是爲了作爲一個玩具的例子,以確保我理解算法,但如果需要在生產代碼中的某處使用它,而是使用默認的Exp方法。 –
'new(big.Int).Exp(big.NewInt(int64(a)),big.NewInt(int64(n)),nil)'更快(並且可以改進爲不重新分配結果,的'數學/大'例程)。 –