2016-05-05 8 views
0

私は自分のBigIntegerクラスをArrayListを使って実装していますが、私の追加メソッドの書き方は不明です。BigIntegerの追加のためのリストを使用する

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(); 
} 

目標は、2つのバイトを加算した値は、一緒にあなたが運ぶならば、別のBigIntに渡すバイトのそのArrayListのを取ると、現在のBigIntのバイトのArrayListに追加し、これをやったときにすることです'1'を入力し、リストの次のバイトに追加します。

IE:

BigInt1 = "3,2,1,7" 

BigInt2 = "1,4,3,5" 

1を搭載しており、2が返さのBigIntためにそのインデックスであろうように、7と5を追加すると、12を作成することになります。

最終のBigIntが

BigIntSum = "4,6,5,2" 

私の質問は、どのように私はこれらのリストを繰り返し処理、バイトを追加し、必要に応じて番号を運び、そしてそれを追加することができますか?なければなりませんかどんな助けでも大歓迎です。 BigIntは、このような

+0

なぜ、独自のArrayListになっている文字列を取ることができ、コンストラクタを持っていますか? 2つの整数の加算は、別の整数を生成する。リストは必要ありません。あなたはこの方法に注意するように見えません。 – EJP

+0

私はバイトを使用しています。バイトは2桁の数字にすることはできません。 BigIntクラスは、数値の各桁をバイトのリストに置きます。このクラスは、通常の整数よりも大きな数を扱うことを目的としているため、リストを使用します。 – Alkarin

+0

実際には、バイト*は2桁の数字にすることができますが、リストを必要とするのを見逃してしまいます(例では2桁以上の数字を表す必要があると仮定します)。 –

答えて

0

何か...

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はBigIntではなく、合計の1桁の値しか持たない。 –

+0

@ScottHunterはPコードです。 – nicomp

+0

OKですが、まだ間違った答えを計算しています –

関連する問題