基数b
加法:z = x + y
初始carry = 0
S = carry + xi + yi; zi = S mod b; carry S / b;
int Add(char x[], char y[], char z[], int n)
{
int i, carry = 0;
for(i = 0; i < n; i++)
{
carry += x[i] + y[i];
z[i] = carry % BASE;
carry /= BASE;
} return carry;
}
减法:z = x - y
初始borrow = 0;
D = xi + b - borrow - yi;zi = D mod b; borrow = 1 - D/b;
int Sub(char x[], char y[], char z[], int n)
{
int i, borrow = 0;
for(i = 0; i < n; i++)
{
int d = x[i] + BASE - borrow - y[i];
z[i] = d % BASE;
borrow =1- d/BASE;
}
return borrow;
}
乘法:
int mul(char x[], char y[], char z[], int m, int n)
{
int i, j, carryout = 0;
for(i = 0; i < m; i++)
{
unsigned carry = 0;
for(j = 0; j < n; j++)
{
carry += x[i]*y[j] + z[i+j];
z[i+j] = carry % BASE;
carry /= BASE;
}
carry += z[i+j];
z[i+j] = carry % BASE;
carry /= BASE;
carryout |= carry;
}
return carryout;
}