大数减法(处理不了负数)
大数减法(处理不了负数)
高精度减法的思想
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;
}

浙公网安备 33010602011771号