问题描述: 将形如1234567890123456789不能储存在long变量中的数称为超长整数或大整数。现讨论大整数的加减乘除运算。
思想方法: 用数组存储超长整数,且为处理的简单起见约定每个元素存放相同位的数字。如:每个元素存放4位。
1、加法运算
void add(int *a, int *b, int *c)
{
int i;
for(i = N - 1; i >= 0; i--) //模拟竖式加法,同位相加再加进位
{
c[i] = a[i] + b[i] + carry;//carry是进位
carry=c[i]/10000;
c[i]=c[i]%10000;
}
}
2、减法运算
void sub(int *a, int *b, int *c)
{
int i;
for(i =N- 1; i >= 0; i--) //模拟竖式减法,同位相减再减借位
{
c[i] = a[i] - b[i] - borrow;//borrow是借位
if(c[i] >= 0)
borrow = 0;
else // 有借位时
{
c[i] = c[i] + 10000;
borrow = 1;
}
}
}
3、乘法运算
3.1 大整数与整数
void mul(int *a, int b, int *c)
{
// b 为乘数
int i, tmp;
carry = 0;//carry为进位
for(i =N- 1; i >=0; i--)//模拟竖式乘法
{
tmp = a[i] * b + carry;
c[i] = tmp % 10000;
carry = tmp / 10000;
}
}
3.2 大整数与大整数
void mul2(int *a, int *b, int *c)
{
long tmp = 0;
int carry, idc;
for (int i=N-1; i>=

5701

被折叠的 条评论
为什么被折叠?



