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

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

高精度减法

#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)
		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--;
	if (w == -1)
		cout << "0" << endl;
	else
		for (; w > 0; w--)
			cout << c[w];
	cout << endl;
	return 0;
}

在这里插入图片描述

发布了10 篇原创文章 · 获赞 0 · 访问量 168

猜你喜欢

转载自blog.csdn.net/qq_40458767/article/details/104750183