2017-11-21 9 views
-5

再帰を使用して2バイトの配列を追加する関数を記述する必要があります。この機能のためのテストは次のとおりです。たとえば再帰を使用してバイト置換を追加する

[Test] 
[TestCaseSource("Add_Function")] 
public AddResult Add_WithRecursiveAlgorithm(byte[] a, byte[] b) 
{ 
    // Arrange 

    // Act 
    var result = AddRecursion(a, b); 

    // Assert 
    return new AddResult(a, b, result); 
    } 

Input : { 1, 1, 1 }, { 1, 1, 1 } 
Result: {2,2,2} 

Input : { 1, 1, 255 }, {0, 0, 1 } 
Result: {1,2,0} 

次のように一般的なルールは以下のとおりです。

•入力に& Bを仮定がnullことは決してありませんし、これからもずっと同じ長さ

•アルゴリズムは入力に対して非破壊でなければなりません。

•アルゴリズムは、1000より大きい大きな入力長を処理できる必要がありますが、入力がスタックオーバーフローを引き起こすほど大きくならないようにしてください。

どうすればいいですか?

+2

あなたの書くべき機能はどこですか?あなたはどこにいるのですか?この質問はどのようにupvoteになったのですか? – Icepickle

+1

さて、それはとても素晴らしく、すべてですが、何を試しましたか?あなたは、あまりにも多くの評判を持っているので、無料のコード作成サービスではないという事実に気付かないでください。 –

+1

これはコード作成サービスではないため、現在の試行を提供する必要があります – Evk

答えて

0
public object[] Add_Function() 
{ 
    return new object[] 
    { 
     new object[] 
     { 
      new byte[] { 1, 1, 1 }, new byte[] { 1, 1, 1 }, new byte[] { 2, 2, 2 } 
     }, 
     new object[] 
     { 
      new byte[] { 1, 1, 255 }, new byte[] { 0, 0, 1 }, new byte[] { 1, 2, 0 } 
     } 
    }; 
} 

[TestCaseSource("Add_Function")] 
public void Add(byte[] a, byte[] b, byte[] expected) 
{ 
    // arrange 
    int len = Math.Max(a.Length, b.Length); 
    Array.Resize(ref a, len); 
    Array.Resize(ref b, len); 
    byte[] result = new byte[len]; 

    //act 
    DoAdd(a, b, result, 0, len - 1); 

    //assert 
    CollectionAssert.AreEqual(expected, result); 
} 

private void DoAdd(byte[] a, byte[] b, byte[] result, int broughtForward, int index) 
{ 
    int carriedForward = (a[index] + b[index] + broughtForward)/(byte.MaxValue + 1); 
    result[index] =(byte)((a[index] + b[index] + broughtForward) % (byte.MaxValue + 1)); 
    if (index > 0) 
    { 
     DoAdd(a,b,result, carriedForward, index-1); 
    } 
} 
関連する問題