算法入门笔记(四):大数相加减(高精度)

算法入门笔记:大数相加减(高精度)

高精度减法

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string A, B;
int a[10000], b[10000], c[10000], i, j;
char ch = '-';
int main()
{
	cin >> A >> B;
	int lena = A.size();
	int lenb = B.size();
	int lenc;
	if (lenb > lena || (lena == lenb && B > A))				//小减大处理
	{
		cout << ch;
		swap(A, B);
		swap(lena, lenb);
	}
	for (i = 0; i < lena; i++)		//字符串转换成数字本身
		a[lena - i] = A[i] - '0';
	for (j = 0; j < lenb; j++)
		b[lenb - j] = B[j] - '0';
	int w = 1;
	while (w <= lena)
	{
		c[w] = a[w] - b[w];
		if (c[w] < 0)					//借位处理
		{
			c[w] = c[w] + 10;
			a[w + 1] --;
		}
		w++;
	}
	while (c[w] == 0 && w > 0)		//处理前导0
		w--;
	if (w == 0)  //w<1也可
		cout << "0";
	else
	for (; w > 0; w--)
		cout <<c[w];
	cout << endl;
	return 0;
}

在这里插入图片描述

高精度加法

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string A, B;
int a[10000], b[10000], c[10000];
int main()
{
	cin >> A >> B;
	int lena = A.size();
	int lenb = B.size();
	for (int i = 0; i < lena; i++)
		a[lena - i] = A[i] - '0';
	for (int i = 0; i < lenb; i++)
		b[lenb - i] = B[i] - '0';
	int w = 1, j = 0;
	while (w <= A.size() || w <= B.size())
	{
		c[w] = a[w] + b[w] + j;

		j = c[w] / 10;							//进位
		c[w] %= 10;
											//此两行代码不能放反了 必须先算进位制 再算减去10后的值    因为如果先算减去的值 则进位的永远都是0
		w++;
	}
	c[w] = j;							//防止最后一位进位
	while (c[w] == 0 && w >= 0)   //w>0
		w--;
	if (w == -1)                 // w<1
		cout << "0" << endl;
	else
		for (; w > 0; w--)
			cout << c[w];
	cout << endl;
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值