2017-10-17 1 views
1

문자열 (본질적으로 거대한 숫자)을 문자열에서 변환의 Big int로 변환하는 방법이 있습니까? 문자열을 Go Int에서 큰 Int로 변환 하시겠습니까?

제가 우선에서 BigInt로 배열 변환 바이트 어레이

array := []byte(string)

로 변환하려고.

그러나 나는 효과가 있다고 생각했지만 출력은 원래 입력과 다릅니다. 그래서 나는 어떤 이유로 옳은 일을하지 못했다고 생각합니다.

내가 다루는 숫자는 300 자리 이상이므로 정규 int를 사용할 수 있다고는 생각하지 않습니다.

가장 좋은 방법은 무엇입니까?

답변

6

Package big

import "math/big"

func (*Int) SetString

func (z *Int) SetString(s string, base int) (*Int, bool)

setString의 지정된베이스 해석 (S)의 값을 Z로 설정하고 복귀 Z 및 부울 나타내는 성공 . 성공을 위해서는 전체 문자열 ( 이 아님)이 유효해야합니다. SetString이 실패하면 값은 z는 지정되지 않지만 반환 값은 nil입니다.

base 인수는 0이거나 2와 MaxBase 사이의 값이어야합니다. 이 0이면 문자열 접두사가 실제 변환 기준을 결정합니다. "0x"또는 "0X"의 접두어는 기본 16을 선택합니다. "0"접두어는베이스 (8), 및 "0B"선택 또는 "0B"는 접두어 그렇지 기재 2. 선택한베이스 선택 ,

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    n := new(big.Int) 
    n, ok := n.SetString("314159265358979323846264338327950288419716939937510582097494459", 10) 
    if !ok { 
     fmt.Println("SetString: error") 
     return 
    } 
    fmt.Println(n) 
} 

운동장 예 10.

이다 : https://play.golang.org/p/ZaSOQoqZB_

출력 :

314159265358979323846264338327950288419716939937510582097494459 
1

보기문자열을 큰 정수로 변환합니다.

package main 


import (
    "fmt" 
    "log" 
    "math/big" 
) 

func main() { 
    i := new(big.Int) 
    _, err := fmt.Sscan("18446744073709551617", i) 
    if err != nil { 
     log.Println("error scanning value:", err) 
    } else { 
     fmt.Println(i) 
    } 
} 

출력 :

18446744073709551617