我想在 golang 中計算 100 個階乘。這是我正在使用的代碼。var fact big.Intfact.MulRange(1, 100)打印輸出給出30414093201713378043612608166064768844377641568960512000000000000但是谷歌搜索 100!給出9.332622e+157。我認為這可能是因為我正在使用(或可能不是)的數據類型。我該如何解決?提前致謝。編輯:所以我在 go playground 中運行了這段代碼,它給出了正確的答案。這是由于我的 PC 的限制嗎?另外,當我將它轉換為字符串并遍歷它時,它顯示不同的數字str := fact.String()for _,val := range str{ fmt.Print(val)}這是所有的代碼package mainimport ( "fmt" "math/big")func main() { var fact big.Int fact.MulRange(1, 100) fmt.Println(fact) n := fact.String() fmt.Println(n) //printing 100! sum := 0 for _, i := range n { sum += int(i) //sum of each digits in 100! } fmt.Println(sum)}這是 go env 顯示的內容:set GOARCH=amd64set GOBIN=set GOCACHE=C:\Users\user\AppData\Local\go-buildset GOEXE=.exeset GOHOSTARCH=amd64set GOHOSTOS=windowsset GOOS=windowsset GOPATH=C:\Users\user\goset GORACE=set GOROOT=C:\Goset GOTMPDIR=set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64set GCCGO=gccgoset CC=gccset CXX=g++set CGO_ENABLED=1set CGO_CFLAGS=-g -O2set CGO_CPPFLAGS=set CGO_CXXFLAGS=-g -O2set CGO_FFLAGS=-g -O2set CGO_LDFLAGS=-g -O2set PKG_CONFIG=pkg-configset GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\user\AppData\Local\Temp\go-build839268890=/tmp/go-build -gno-record-gcc-switches去版本:去版本go1.10.1 windows/amd64
1 回答

一只甜甜圈
TA貢獻1836條經驗 獲得超5個贊
要打印一個string
值,只需將其按原樣傳遞給fmt.Println()
:
str?:=?fact.String() fmt.Println(str)
另請注意,您不需要調用它的String()
方法,fmt
包會為您完成。但如果你只是傳遞fact
給它就不行,因為Int.String()
有指針接收器,所以你必須傳遞一個指針給它:
fmt.Println(&fact)
或者*big.Int
首先聲明并使用,然后您可以fact
簡單地通過打印:
var fact = new(big.Int)
fact.MulRange(1, 100)
fmt.Println(fact)
事實上,因為所有的方法都有big.Int
指針接收者,你應該總是聲明和使用指針big.Int
以避免意外。
筆記:
您的原始代碼不會打印您想要的內容,因為for range
在一個字符串上的范圍超過了它的符文(字符),并且rune
是的別名int32
,因此結果的字符將打印為單獨的數字,它們之間沒有空格(因為您用fmt.Print()
稱呼)。
出于同樣的原因,要計算數字的總和,您必須將符文轉換為它們所代表的數字的數值。為此,您可以簡單地使用digit - '0'
:
str := fact.String()
sum := 0
for _, val := range str {
? ? sum += int(val - '0')
}
fmt.Println(sum)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000648
- 1 回答
- 0 關注
- 171 瀏覽
添加回答
舉報
0/150
提交
取消