多倍長整数をlong整数に変換する


関数名
mpNum2Long  多倍長整数をlong整数に変換する
形式
int mpNum2Long(unsigned long *ul, int *num);
引数
ul   (出力)対応した符号なしlong整数
num  (入力)多倍長整数
関数値
変換できなかったときは -1、OK 時は 0。
注意事項
多倍長整数の配列の各要素 ai(i は 1 以上)は1語を表し、 1語で表し得る最大の整数は 9999 とする。語の長さは a0 の値で表す。すなわち、多倍長整数は
anKn-1+ an-1Kn-2+...+a2K+ a1
で表現する。ただし、K=10000、n=a0

用例(mpNum2Long-test.c

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

int mpNum2Long(unsigned long *ul, int *num)
{
    unsigned long maxUL, maxULdivN;
    unsigned long x;
    int      *nn;

    maxUL = ~0;
    maxULdivN = maxUL / N;

    x = 0;
    for (nn = num + *num; nn != num; ) {
        if (x > maxULdivN) return -1;
        x *= N;
        if (*nn > maxUL - x) return -1;
        x += *nn--;
    }
    *ul = x;

    return 0;
}
説明
変換したい多倍長整数が、最大の符号なしlong整数よりも大きい 場合は、変換不可とする。

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