高精度正整数减法
目录
减法和加法一样,十分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;
}
谢谢观看