Вычитание больших чисел Голанга - PullRequest
0 голосов
/ 22 апреля 2019

Я не думал, что мне придется написать об этом, но нигде не могу найти хотя бы пример вычитания больших чисел

Итак, у меня есть два числа, и я хочу вычесть их, говорит библиотекачто существует только ограничение на объем памяти, однако, когда я пытаюсь вычесть два 256-битных числа, я получаю сообщение об ошибке.

Скажите, что с ним делать и как его решить?Я начал изучать Go, все кажется таким классным, но я постоянно сталкиваюсь с подобными вопросами.Что не так .......

package main

import (
    "fmt"
    "math/big"
)

func main() {
    a := big.NewInt(113792089237316195423570985008687907853269984665640564039457584007908834671645)
    b := big.NewInt(20277110887056303803699431755396003735040374760118964734768299847012543114150)
    c := big.NewInt(0).Sub(a, b)
    fmt.Println("c =", c)
}

Вывод:

*prog.go:9:18: constant 113792089237316195423570985008687907853269984665640564039457584007908834671645 overflows int64
prog.go:10:18: constant 20277110887056303803699431755396003735040374760118964734768299847012543114150 overflows int64*

Я использую go версию go1.12.4 linux / amd64

этот код вдетская площадка: https://play.golang.org/p/AY8Z8kkCRdg

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Похоже, вам нужно использовать big.Int.SetString в вашем коде. Вот ссылка на игровую площадку, там работает: https://play.golang.org/p/HvEke4g7e8V

Для тех, кто не хочет нажимать на ссылку:

package main

import (
    "fmt"
    "math/big"
)

func main() {
    a, _ := new(big.Int).SetString("113792089237316195423570985008687907853269984665640564039457584007908834671645", 10)
    b, _ := new(big.Int).SetString("20277110887056303803699431755396003735040374760118964734768299847012543114150", 10)
    c := big.NewInt(0).Sub(a, b)
    fmt.Println("c =", c)
}

0 голосов
/ 22 апреля 2019

мдэ .... .......

package main

import (
    "fmt"
    "math/big"
)

func main() {
    i := new(big.Int)
    i.SetString("113792089237316195423570985008687907853269984665640564039457584007908834671645", 10)
    k := new(big.Int)
    k.SetString("20277110887056303803699431755396003735040374760118964734768299847012543114150", 10) 
    c := big.NewInt(0).Sub(i, k)
    fmt.Println("c =", c)
}

https://play.golang.org/p/AuGj9A93FbP

...