
3高精度减法√
发布时间:
例:求两个正整数的差,输入两个字符串为正整数,中间以空格隔开,输出两数的差
js
#include <bits/stdc++.h>
using namespace std;
int main() {
//第一步:定义两个string类型变量和三个int类型数组;
int a[256], b[256], c[256];
string s1,s2;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
//读入两个高精度整数,存入字符串
cin>>s1>>s2;
//第二步:判断正负,如果s1比s2对应的整数小,结果为负,则交换s1和s2;
if (s1.size()<s2.size()||s1.size()==s2.size()&&s1<s2) {
swap(s1,s2);
cout << "-"; // 交换了减数和被减数,结果为负数
}
//第三步:将两个高精度整数逆序存入a、b两个整数数组中;
for (int i=s1.size()-1,j=1; i >=0; i--,j++) {
a[j] = s1[i] - '0';
}
for (int i=s2.size()-1,j=1; i >=0; i--,j++) {
b[j] = s2[i] - '0';
}
//第四步:从左向右,不够借位,逐位相减;
int len=s1.size();
for (int i =1; i<= len ; i ++) {
if (a[i] < b[i]) {
a[i] += 10; // 不够减,那么向高位借1当10
a[i + 1]--;
}
c[i] = a[i] - b[i]; // 对应位相减
}
//第五步:逆序输出;
int flag=0;//从最高位开始向低位
for (int i=len; i>=1; i--) {
if(c[i]!=0) { //找第一个不为0的位。
flag=i;
break;
}
}
//结果为0
if(flag==0) {
flag==0;
}
//逆序输出
for(int i=flag; i>=1; i--) {
cout<<c[i];
}
return 0;
}