无论是加法还是减法,读入的两个数都是正整数,计算的结果保存到数组中。
对于数据的读取,可以是字符串,也可以是整数。
对于计算结果,我这里不超过80位(可以修改)
两个数相加的程序为:
<span style="font-size:18px;"><span style="font-size:18px;">#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int and[80]={0};
int main(){
string a,b;
int aa[80]={0},bb[80]={0};
int n;
cin>>n;
while(n--){
cin>>a>>b;
for(int i=0;i<a.size();i++ ){
aa[i]=(int)(a[a.size()-1-i]-'0');
}
for(int j=0;j<b.size();j++){
bb[j]=(int)(b[b.size()-1-j]-'0');
}
int l=_MAX(a.size(),b.size() ;
for(int h=0;h<l;h++){
and[h]=aa[h]+bb[h]+and[h];
and[h+1]=(and[h])/10;
and[h]=and[h]%10;
}
memset(aa,0,sizeof(aa) );
memset(bb,0,sizeof(bb) );
int m=79;
while(and[m]==0){
m--;
}
for(;m>=0;m--)
cout<<and[m];
cout<<endl;
memset(and,0,sizeof(and));
}
return 0;
}</span></span>
两个数做减法,大数减去小数可以直接输出结果,小数减去大数,需要修正符号位,然后输出
减法程序如下:
<span style="font-size:18px;"><span style="font-size:18px;">#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int compare(int[],int[]);
int and[80]={0};
int main(){
string a,b;
int aa[80]={0},bb[80]={0};
int n,flag;
cin>>n;
while(n--){
cin>>a>>b;
for(int i=0;i<a.size();i++ ){
aa[i]=(int)(a[a.size()-1-i]-'0');
}
for(int j=0;j<b.size();j++){
bb[j]=(int)(b[b.size()-1-j]-'0');
}
int l=_MAX(a.size(),b.size() );
flag=compare(aa,bb);
if(flag==0)
cout<<"0"<<endl;
else if(flag==1){
for(int h=0;h<l;h++){
if((aa[h]-bb[h])<0){
aa[h+1]=aa[h+1]-1;
aa[h]=aa[h]+10;
}
and[h]=aa[h]-bb[h];
}
}
else if(flag==-1){
for(int h=0;h<l;h++){
if((bb[h]-aa[h])<0){
bb[h+1]=bb[h+1]-1;
bb[h]=bb[h]+10;
}
and[h]=bb[h]-aa[h];
}
}
int m=79;
if(flag==0)
return 0;
else{
while(and[m]==0)
m--;
if(flag==-1)
cout<<"-";
for(;m>=0;m--)
cout<<and[m];
cout<<endl;
}
memset(and,0,sizeof(and) );
memset(aa,0,sizeof(aa) );
memset(bb,0,sizeof(bb) );
}
return 0;
}
int compare(int a[80],int b[80]){
int i=79,j=79;
while(a[i]==0)
i--;
while(b[j]==0)
j--;
if(i>j)
return 1;
if(i<j)
return -1;
if(i==j){
for(int h=j;h>=0;h--){
if(a[h]>b[h])
return 1;
if(a[h]<b[h])
return -1;
}
}
return 0;
}</span></span>