我正在嘗試在 go 中實作我的 python 代碼。這是一個查找大數字的逆階乘的python代碼。
def largeInverseFactorial(n):
len_n = len(n)
i = 1
ans = 1
while True:
ans = math.log10(i)
if ans >= len_n:
return i
i = 1
這是翻譯后的go代碼:
func largeInverseFactorial(n string) int64 {
len_n := float64(len(n))
var i float64 = 1
var ans float64 = 1
for true {
ans = math.Log10(i)
if ans >= len_n {
return int64(i)
}
i = 1
}
return 0
}
我需要這個 go 代碼來處理長度可以達到 10^6 的數字字串。但令我驚訝的是,go 代碼比 python 慢了 20 倍以上。誰能告訴我我在 go 中缺少什么或背后的原因是什么。
uj5u.com熱心網友回復:
main.go
package main
import (
"fmt"
"io/ioutil"
"math"
"net/http"
"time"
)
func largeInverseFactorial(n string) int64 {
len_n := float64(len(n))
var i float64 = 1
var ans float64 = 1
for true {
ans = math.Log10(i)
if ans >= len_n {
return int64(i)
}
i = 1
}
return 0
}
var testInputFile = "https://gist.githubusercontent.com/uprety/28f618cf04f2ced64c15c02249df14a4/raw/a3f7692a0e9c95523fc262b5c357d1cf6bd2879d/testfile.in"
func main() {
// download test input
resp, err := http.Get(testInputFile)
if err != nil {
panic(err)
}
input, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
inputString := string(input)
fmt.Println("Length of input:", len(inputString))
start := time.Now()
fmt.Println("largeInverseFactorial result:", largeInverseFactorial(inputString))
fmt.Println("takes", time.Since(start).Seconds(), "seconds")
}
測驗結果:
> go run main.go
Length of input: 920443
largeInverseFactorial result: 189999
takes 0.0023581 seconds
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/423083.html
標籤:
