0

v配列を使用して 2 つの数値 (たとえばと などn)の差を計算したいv-n(なぜそうしなければならないのかは聞かないでください)。各数値の配列は、次の方法で作成されます。

  • vそれらの容量は、 ~ の間の最大数の桁数ですn(=qコード内)。
  • vArray[i]=配列全体を埋めるための先頭の 0 を除いた 4i番目の桁v
  • nArray[i]= -配列全体を埋めるための先頭のゼロ以外iの桁n

たとえば、v= 10 とn= 2 を選択すると、

vArray = [1,0]
nArray = [0,-2]

sumそこで、差の桁数に等しい配列を計算するために、このコードを書きました (sum = [0,9]上記の例の場合)。

long r = 0;
for (int i = q-1 ; i > -1; i--){
    sum[i] = vArray[i] + nArray[i];
    if (sum[i] < 0){
        r = floor(sum[i]/10);
        sum[i-1] -= r;
        sum[i] = sum[i]+10;
    }else{
        r = 0;
    }

    NSLog(@"%li",sum[i]);
}

問題は、合計配列が本来あるべきものと等しくないことです。同じ例でsum = [1,8]は、コードの問題は何ですか?

注 :vArrayおよびnArrayは適切に生成されます。

編集:いくつかの例と期待される結果

    v =  |    n =   |  vArray =   |     nArray=    |    sum=
    25   |    9     |    [2,5]    |      [0,9]     |    [1,6]
    105  |    10    |   [1,0,5]   |     [0,1,0]    |   [0,9,5]
   1956  |   132    |  [1,9,5,6]  |    [0,1,3,2]   |  [1,8,2,4]
  369375 |   6593   |[3,6,9,3,7,5]|  [0,0,6,5,9,3] |[3,6,2,7,8,2]
4

1 に答える 1

2

Big Integer表現 を使用しているため、データ構造を理解していると思います。

与えられた番号: 1234

V 配列は [1, 2, 3, 4] です。

なぜあなたがこれをしたいのかわからないすべての数字(別名合計)を追加するには、次のようにします。

int digit_sum = 0;
for (int i = 0;  i < 4; i++)
{
    digit_sum += v[i];
} 

表現を「通常」に変換するには、これを試してください:

int value = 0;
for (int i = 0; i < 4; ++i)
{
  value = (value * 10) + v[i];
}

減算を実行するには、手動で行っているかのように手順を実行する必要があります。また、2 番目の番号も必要になります。

編集 1: 大きな数の減算へのリンク
これは役立つかもしれません:
C での大きな数の
減算

于 2013-02-21T16:13:35.607 に答える