超长整数运算(大整数运算)

问题描述: 将形如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>=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值