模拟竖式运算
注意好字符处理、颠倒对齐、借位加位、排除无效零等细节即可
加法:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char chA[510],chB[510];
cin>>chA>>chB;
int len_chA=strlen(chA);
int len_chB=strlen(chB);
int inA[510]={0},inB[510]={0},inC[510]={0};
for(int i=0;i<len_chA;++i)
{
inA[len_chA-1-i]=chA[i]-'0';
}
for(int i=0;i<len_chB;++i)
{
inB[len_chB-1-i]=chB[i]-'0';
}
bool jinwei=false;
for(int i=0;i<len_chA||i<len_chB;++i)
{
inC[i]+=inA[i]+inB[i];
int tempi=i;
while(inC[tempi]>=10)
{
inC[tempi]-=10;
++inC[tempi+1];
++tempi;
if(tempi>=len_chA&&tempi>=len_chB)
{
jinwei=true;
}
}
}
int len_C=max(len_chA,len_chB);
if(jinwei) ++len_C;
for(int i=len_C-1;i>=0;--i)
{
cout<<inC[i];
}
return 0;
}
减法:
(注意大整数比较大小)
#include<iostream>
#include<cstring>
using namespace std;
int which_bigger(int left[510],int right[510],int leftlen,int rightlen)//-1为左边大,1为右边大,0表示一样大
{
if(leftlen>rightlen) return -1;
else if(rightlen>leftlen) return 1;
else
{
for(int i=leftlen-1; i>=0; --i)
{
if(left[i]>right[i]) return -1;
else if(right[i]>left[i]) return 1;
}
}
return 0;
}
void Minus(int x[510],int y[510],int lenx,int leny,int z[510])
{
for(int i=0;i<lenx;++i)
{
else
if(x[i]-y[i]>=0) z[i]=x[i]-y[i];
{
z[i]=x[i]+10-y[i];
x[i+1]--;
int tempi=i+1;
while(x[tempi]<0)
{
x[tempi]+=10;
x[tempi+1]-=1;
tempi+=1;
}
}
}
}
int main()
{
char chA[510],chB[510];
cin>>chA>>chB;
int len_A=strlen(chA);
int len_B=strlen(chB);
int inA[510]= {0},inB[510]= {0},inC[510]= {0};
for(int i=0; i<len_A; ++i)
{
inA[i]=chA[len_A-1-i]-'0';
}
for(int i=0; i<len_B; ++i)
{
inB[i]=chB[len_B-1-i]-'0';
}
int A_B_bigger=which_bigger(inA,inB,len_A,len_B);
if(A_B_bigger==0)
{
cout<<"0";
}
else
{
int lenC=0;
if(A_B_bigger==-1)
{
Minus(inA,inB,len_A,len_B,inC);
lenC=len_A-1;
}
else
{
Minus(inB,inA,len_B,len_A,inC);
cout<<"-";
lenC=len_B-1;
}
while(inC[lenC]==0)
{
lenC--;
}
for(int i=lenC;i>=0;--i) cout<<inC[i];
}
return 0;
}
乘法:
(注意这里的进位不一定为进1了)
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char chA[510],chB[510];
cin>>chA>>chB;
int lenA=strlen(chA);
int lenB=strlen(chB);
int inA[510]={0},inB[510]={0},inC[1024]={0};
for(int i=0;i<lenA;++i)
{
inA[i]=chA[lenA-1-i]-'0';
}
for(int i=0;i<lenB;++i)
{
inB[i]=chB[lenB-1-i]-'0';
}
for(int i=0;i<lenB;++i)
{
for(int j=0;j<lenA;++j)
{
inC[i+j]+=inA[j]*inB[i];
}
int tempi=i;
while(tempi<lenA+lenB)
{
if(inC[tempi]>=10)
{
inC[tempi+1]+=inC[tempi]/10;
inC[tempi]=inC[tempi]%10;
tempi+=1;
}
else
{
tempi+=1;
}
}
}
int lenC=lenA+lenB-1;
while(inC[lenC]==0)
{
lenC--;
}
for(int i=lenC;i>=0;--i)
{
cout<<inC[i];
}
return 0;
}
That’all.
Thank you.