2016-05-05 4 views
0

Ich implementiere meine eigene BigInteger-Klasse mit einer ArrayList und bin mir nicht sicher, wie ich meine Additionsmethode schreiben soll.Verwenden einer Liste für BigInteger-Zusatz

public BigInt plus(BigInt operand){ 
    //deep copy? 
    ArrayList<Byte> a = this.digit; 
    ArrayList<Byte> b = operand.digit; 
    ArrayList<Byte> sum = new ArrayList<>(); 

    //code 

    return new BigInt(); 
} 

Das Ziel ist, in einem anderen BigInt, nimmt seine Arraylist von Bytes übergeben und an die Arraylist von Bytes des aktuellen BigInt hinzufügen, aber wenn dies zu tun, wenn der Wert der Zugabe von 2 Bytes zusammen würden Sie tragen die '1' und fügen Sie es dem nächsten Byte in der Liste hinzu.

IE:

BigInt1 = "3,2,1,7" 

BigInt2 = "1,4,3,5" 

7 und 5 würde 12 schaffen Hinzufügen, so wird die durch 1 und 2 wird für das zurück BigInt in diesem Index sein.

sollte die endgültige BigInt

BigIntSum = "4,6,5,2" 

Meine Frage ist sein, wie kann ich durch diese Listen durchlaufen, die Bytes hinzufügen und eine Nummer, falls erforderlich, tragen und das hinzufügen? Jede Hilfe wird sehr geschätzt. BigInt hat einen Konstruktor, der eine Zeichenfolge nehmen, die in seine eigene Arraylist

+0

Warum? Die Addition zweier Ganzzahlen ergibt eine andere ganze Zahl. Sie brauchen keine Liste. Sie scheinen diese Methode nicht einmal zu beachten. – EJP

+0

Ich benutze Bytes, und ein Byte kann keine 2-stellige Nummer sein. Die BigInt-Klasse platziert jede Ziffer der Nummer in einer Liste von Bytes. Diese Klasse soll Zahlen aufnehmen, die größer sind, als eine normale Ganzzahl verarbeiten kann, und verwendet daher die Liste. – Alkarin

+0

Eigentlich kann ein Byte * eine 2-stellige Zahl sein, obwohl ich nicht erkennen kann, wie es um eine Liste geht (vorausgesetzt, wie in Ihrem Beispiel müssen Sie Zahlen mit mehr als 2 Ziffern darstellen). –

Antwort

0

so etwas wie dieses gedreht wird ...

carry = 0 
for i = bigInt1.Length - 1 to zero 
sum = bigInt1[i] + bigInt2[i] + carry 
if (sum > 10) { 
    sum = sum mod 10 
    carry = 1 
else 
    carry = 0 
endif 
bigIntResult = sum 
loop i 
// after the loop, if carry == 1, then you have overflow and you need to lengthen bigIntResult 
+0

BigIntResult scheint kein BigInt zu sein und hat immer nur den Wert einer einzelnen Ziffer der Summe. –

+0

@ScottHunter es ist P-Code. – nicomp

+0

OK, aber es berechnet immer noch die falsche Antwort –