有没有办法直接从Go中的标准输入扫描big.Int?现在我正在这样做:
package main
import (
"fmt"
"math/big"
)
func main() {
w := new(big.Int)
var s string
fmt.Scan(&s)
fmt.Sscan(s, w)
fmt.Println(w)
}
我也可以使用.SetString。但是,有没有办法直接从标准输入扫描big.Int而不先扫描字符串或整数?
答案 0 :(得分:3)
例如,
package main
import (
"fmt"
"math/big"
)
func main() {
w := new(big.Int)
n, err := fmt.Scan(w)
fmt.Println(n, err)
fmt.Println(w.String())
}
输入(stdin):
295147905179352825857
输出(标准输出):
1 <nil>
295147905179352825857
答案 1 :(得分:1)
据我所知 - 不,没有别的办法。事实上,您所拥有的是他们在文档中扫描big.Int
时的默认示例。
package main
import (
"fmt"
"log"
"math/big"
)
func main() {
// The Scan function is rarely used directly;
// the fmt package recognizes it as an implementation of fmt.Scanner.
i := new(big.Int)
_, err := fmt.Sscan("18446744073709551617", i)
if err != nil {
log.Println("error scanning value:", err)
} else {
fmt.Println(i)
}
}
您可以在此处查看相关部分 - http://golang.org/pkg/math/big/#Int.Scan