前几天敲了一个A+B,最近又敲了一个A-B,感觉加法原理和减法差不多 一个是要进位,一个是要向前一位借 此代码只考虑了A B为正数的情况。。
#include <iostream> //大数A-B
#include <cstdio>
#include <algorithm>
#include <ctype.h>
#include <cstring>
using namespace std;
void dsj(int x[],int y[])
{
int i;
for(i=0;i<200;i++) //开始模拟减法
{
x[i]-=y[i];
if(x[i]<0)
{
x[i]+=10;
x[i+1]--;
}
}
for(i=199;i>=0;i--)
if(x[i]!=0) //去除前导0
break;
int flag=i;
if(flag==-1) //将 0-0 的情况排除
cout<<"0"<<endl;
else
{
for(i=flag;i>=0;i--)
cout<<x[i];
cout<<endl;
}
}
int main()
{
char a[200],b[200];
int x[200],y[200],i;
while(cin>>a>>b)
{
memset(x,0,sizeof(x)); //初始化
memset(y,0,sizeof(y));
int p1=0;
for(i=strlen(a)-1;i>=0;i--) //将字符串数据转化成整型数据,以便进行模拟减法
x[p1++]=a[i]-'0';
int p2=0;
for(i=strlen(b)-1;i>=0;i--)
y[p2++]=b[i]-'0';
if(p1>p2) //比较A B的大小
dsj(x,y);
else if(p1==p2)
{
if(strcmp(a,b)>=0) //这比较坑 一开始没想到用strcmp比较大小
dsj(x,y);
else
{cout<<"-";dsj(y,x);}
}
else if(p1<p2)
{cout<<"-";dsj(y,x);}
}
return 0;
}