Skip to content

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;
}
   

上次更新: