0

単一リンクリストに格納されている数字を追加するC#コードの一部に取り組んでいます。11118を含むバッファ単一リンクリストを作成しました。最終的なリストは、129のようになっている必要があります。10より大きい各要素は、次の桁にキャリーオーバーを渡す必要があり、%10の結果は、129を作成する最終リストに渡されます。左から右へ?

私は次のロジックを作成しましたが、明らかに私は何かを無視しています。

 for (int i = 0; i < bufferList.Size(); i++)
 {
     int mostLeftValue = Convert.ToInt32(bufferList.GetValue(i));
     if (mostLeftValue >=10  && i + 1 < bufferList.Size())
     {
         int nextLeftValue = Convert.ToInt32(bufferList.GetValue(i + 1))+1;
         int modedNextValue = nextLeftValue % 10;
         finalList.InsertAtTail(modedNextValue);           
     }

     int moddedValue =  mostLeftValue %10 ;
     finalList.InsertAtFront(moddedValue);
4

1 に答える 1

1

ある値から次の値に何かを持ち越しているようには見えません。また、疑わしいと思われる出力リストの両端に追加しています。

これは単純な実装です。List<int>基本的には、実際に加算することなく、2つの数値を手動で加算したときに実行することを実行します。現在の番号を取得し、桁上げされた番号を追加し、「単位」を格納し、「10」を次の列に繰り越します。

Number      11   11    8
Carry        0 ┌─ 1 ┌─ 1 ┌─ 0
Sum         11 │ 12 │  9 │
Store        1 │  2 │  9 │  stop
Carry over  1 ─┘ 1 ─┘ 0 ─┘

[i] -> .GetValue(i)リンクリスト( 、、、または同様のもの)用.Add -> .InsertAtTailに変更できるはずです。.Count -> .Size()

int carry = 0;
for (int i = 0; i < input.Count; i++)
{
    int sum = carry + input[i]; // add previous carry
    output.Add(sum % 10);       // store the "units"
    carry = sum / 10;           // carry the "tens"
}
while (carry > 0)               // anything left carried?
{
    output.Add(carry % 10);     // store the "units"
    carry = carry / 10;         // carry the "tens"
}
于 2012-11-27T08:34:43.933 に答える