大数减法(处理不了负数)

大数减法(处理不了负数)

高精度减法的思想

1.输入大数;
2.判断大小,固定s1恒大于s2:
if(s1.size()<s2.size() || s1.size()==s2.size() && s1<s2){
swap(s1,s2); //交换值
cout<<"-";
}
3.获取长度;
4.字符变整数:a[i] = s1[len1-i-1]-'0';
5.减法运算:
if(a[i]<b[i]){
a[i+1]--; //上位--
a[i]+=10; // 本位+10
}
c[i] = a[i]-b[i];

6.去除前导零;
while(c[len1-1]==0 && len1>1){
len1--;
}
7.反向输出;

实现代码

#include<iostream>
#include<string>
using namespace std;
string s1, s2;
int a[10000], b[10000], c[10000];
int main() {
	//	1.输入值
	cin >> s1 >> s2;
	//	2.判断大小,固定s1恒大于s2 
	if (s1.size() < s2.size() || s1.size() == s2.size() && s1 < s2) {
		swap(s1, s2); //交换值
		cout << "-";
	}
	//	3.获取长度
	int len1 = s1.size();
	int len2 = s2.size();
	//	4.字符变整数
	for (int i = 0; i < len1; i++) {
		a[i] = s1[len1 - i - 1] - '0';
	}
	for (int i = 0; i < len2; i++) {
		b[i] = s2[len2 - i - 1] - '0';
	}
	//5.减法运算 
	for (int i = 0; i < len1; i++) {
		if (a[i] < b[i]) {
			a[i + 1]--; //上位-- 
			a[i] += 10; // 本位+10 
		}
		c[i] = a[i] - b[i];
	}
	//6去除前导零
	while (c[len1 - 1] == 0 && len1 > 1) {
		len1--;
	}
	//7.反向输出
	for (int i = len1 - 1; i >= 0; i--) {
		cout << c[i];
	}

	return 0;
}

posted @ 2024-06-30 09:34  高浩杰  阅读(28)  评论(0)    收藏  举报