多倍長整数の加算


関数名
mpAdd  多倍長整数同士の加算
形式
void mpAdd(int *ret, int *a, int *b);
引数
ret   (出力)多倍長整数同士の加算の結果(a + b)
a, b  (入力)多倍長整数
関数値
なし
注意事項
配列の各要素 ai(i は 1 以上)は1語を表し、 1語で表し得る最大の整数は 9999 とする。語の長さは a0 の値で表す。すなわち、多倍長整数は
anKn-1+ an-1Kn-2+...+a2K+ a1
で表現する。ただし、K=10000、n=a0

用例(mpAdd-test.c

プログラム(mpAdd.c
#define N 10000

void mpAdd(int *ret, int *a, int *b)
{
    int  i;
    int  lr, la, lb;
    int  *rr;
    int  x;

    la = *a;
    lb = *b;
    lr = (la >= lb) ? la : lb;

    rr = ret;
    x = 0;
    for (i = 1; i <= lr; i++) {
        if (i <= la) x += *++a;
        if (i <= lb) x += *++b;
        if (x < N) {
            *++rr = x;
            x = 0;
        } else {
            *++rr = x - N;
            x = 1;
        }
    }
    *++rr = x;
    *ret = lr + x;
}
説明
10進数の計算と同じように、下語より加えていく。和が10000 を超えたら桁上がりが発生し、上の語に1を余分に加える。

関連関数
多倍長整数の減算多倍長整数の乗算多倍長整数の除算多倍長整数の平方根多倍長整数の大小比較数列を多倍長整数に変換する多倍長整数を数列に変換するlong整数を多倍長整数に変換する多倍長整数をlong整数に変換する