高精度正整数减法

目录

正片开始

全篇代码


减法和加法一样,十分easy,多的我不说了,直接开始

学习之前你需要掌握:for循环,while循环,数组,字符串,swap函数

正片开始

老套路,输入,求长度,导入

	string s1,s2;
	cin>>s1>>s2;
	la=s1.size(),lb=s2.size();
	for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
	for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';

你是否注意到一个问题,如果a<b就需要输出一个负号!

	if((la<lb)||((la==lb)&&(s1<s2))){
		swap(s1,s2);
		swap(la,lb);
		cout<<"-";
	}

开始“减”了,思想:用一个if来判断是否需要退位,c数组的第i位=a数组的第i位减b数组的第i位

	i=0;
	while(i<la||i<lb){
		if(a[i]<b[i]){
			a[i]+=10;
			a[i+1]--;
		}
		c[i]=a[i]-b[i];
		i++;
	}

与加法不同的是减法最后需要去“0”!

	lc=i;
	while(c[lc]==0 && lc>0) lc--;

输出,结束!!!

	for(i=lc;i>=0;i--)
		cout<<c[i];

全篇代码

//(water problem)
#include<bits/stdc++.h>
using namespace std;
const int mx=1010;
int a[mx],b[mx],c[mx];
int la,lb,lc,i;
int main()
{
	string s1,s2;
	cin>>s1>>s2;
	la=s1.size(),lb=s2.size();
	if((la<lb)||((la==lb)&&(s1<s2))){
		swap(s1,s2);
		swap(la,lb);
		cout<<"-";
	}
	for(i=0;i<la;i++) a[la-i-1]=s1[i]-'0';
	for(i=0;i<lb;i++) b[lb-i-1]=s2[i]-'0';
	i=0;
	while(i<la||i<lb){
		if(a[i]<b[i]){
			a[i]+=10;
			a[i+1]--;
		}
		c[i]=a[i]-b[i];
		i++;
	}
	lc=i;
	while(c[lc]==0 && lc>0) lc--;
	for(i=lc;i>=0;i--)
		cout<<c[i];
    return 0;
}

 谢谢观看

posted @ 2022-09-17 16:58  Euouae  阅读(22)  评论(0编辑  收藏  举报