如何从Go中的标准输入扫描big.Int

时间:2014-03-15 06:55:32

标签: go biginteger

有没有办法直接从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而不先扫描字符串或整数?

2 个答案:

答案 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