2016-06-28 4 views
0

Ich bin neu in Golang und mein Problem ist:Go: Wie teilt man große Zahlen?

Ich habe zwei Byte-Arrays von 64 Elementen, nennen wir sie "A" und "B". Jedes dieser Arrays repräsentiert eine vorzeichenlose Ganzzahl.

Ich mag eine andere 64-Byte-Array "R", die das Ergebnis von (A/B) erzeugen.

Irgendwelche Ideen?

// pre-condition: A and B have 64 bytes each 
// A and B each represent an unsigned integer 
// R = (A/B) 

func divideByteArrays(A, B []byte) []byte { 
    R := make([]byte, 64) 
    // ... do something ... 
    return R 
} 

Vielen Dank im Voraus!

EDIT:

ist es möglich, "math/big" zu verwenden, um dieses Ziel zu erreichen?

+5

Die der [ 'math/big' Paket] (https://godoc.org/math/big) könnte das sein, was Sie suchen. –

+0

Nun danke für die Anregung, aber ich habe in der Tat nehmen Sie einen Blick auf das Paket, aber ich konnte nichts finden, mich mit diesen Byte-Arrays zu helfen. Wie ich gesehen habe, ist es möglich, diese riesigen Zahlen zu erreichen, indem man langsam Operationen mit kleinen Zahlen ausführt. –

Antwort

4

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

package main 

import (
    "math/big" 
    "fmt" 
) 

func divideByteArrays(A, B []byte) []byte { 
    var AI, BI, R big.Int 
    AI.SetBytes(A) 
    BI.SetBytes(B) 
    R.Div(&AI, &BI) 
    return R.Bytes() 
} 

func main() { 
    a_array := make([]byte, 64) 
    b_array := make([]byte, 64) 

    for i := 0; i < 64; i++ { 
     a_array[i] = 4 
     b_array[i] = 2 
    } 

    fmt.Println(divideByteArrays(a_array, b_array)) 
} 
+0

Omg du bist ein Genie! Ich blieb eine ganze Weile bei diesem Problem stecken. Vielen Dank. –