亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 中的 100 階乘

golang 中的 100 階乘

Go
繁花不似錦 2023-04-04 14:38:29
我想在 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


查看完整回答
反對 回復 2023-04-04
  • 1 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號