高精度减法
作者:互联网
减法比加法难在两个地方,一个是向上一位借位,这个代码实现比较容易,基本思路是把加法的向上进位改为减掉借位的1,就比较好实现了
第二个,是被减数比减数大,我的解决方案是把减得过程写成函数,在执行函数前进行一下判断,假设是a-b,当a<b就先输出-号,然后算b-a
代码实现如下
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<string> using namespace std; char a1[1000],b1[1000]; int a[1000],b[1000],c[1000],x,i,lena,lenb; void jian(int a[],int b[]) { int m=max(lena,lenb); for(i=0;i<m;i++) { c[i]=a[i]-b[i]-x;//不能直接赋值,要加上前面的退位 if(c[i]<0) { x=1; c[i]+=10; } } m++; } int main() { scanf("%s",a1);scanf("%s",b1);//scanf就爆0! if(a1[0]==48&&b1[0]==48) { cout<<"0"<<endl; return 0; } lena=strlen(a1),lenb=strlen(b1); for(i=0;i<lena;i++) { a[lena-i-1]=int(a1[i]-48); } for(i=0;i<lenb;i++) { b[lenb-i-1]=int(b1[i]-48);//倒序输入便于进位 } i=0; if(strcmp(a1,b1)<=0) { printf("-"); jian(b[i],a[i]); } else jian(a[i],b[i]); m--; //删除前导0 for(int i=m;i>=0;i--) cout<<c[i]; cout<<endl; return 0; }
标签:lenb,lena,高精度,int,借位,减法,include,1000 来源: https://www.cnblogs.com/this-is-M/p/10464747.html