高精度加减乘法模板
加法:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int lena,lenb,lenc,x;
char a1[1010],b1[1010];
int a[1010],b[1010],c[1010];
int main()
{
scanf("%s%s",a1,b1);
lena=strlen(a1);
lenb=strlen(b1);
for(int i=0;i<lena;i++)
a[lena-i]=a1[i]-'0';
for(int i=0;i<lenb;i++)
b[lenb-i]=b1[i]-'0';
lenc=1;
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
c[lenc]=x;
if(c[lenc]==0&&lenc>0)
lenc--;
for(int i=lenc;i>=1;i--)
printf("%d",c[i]);
return 0;
}
减法:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int lena,lenb,lenc;
int a[1010],b[1010],c[1010];
char a1[1010],b1[1010],tmp[1010];
bool sign;
void exch_str()
{
strcpy(tmp,a1);
strcpy(a1,b1);
strcpy(b1,tmp);
swap(lena,lenb);
sign=1;
}
int main()
{
scanf("%s%s",a1,b1);
lena=strlen(a1);
lenb=strlen(b1);
if(lena<lenb)
exch_str();
if(lena==lenb)
{
if(strcmp(a1,b1)<0)
exch_str();
}
for(int i=0;i<lena;i++)
a[lena-i]=a1[i]-'0';
for(int i=0;i<lenb;i++)
b[lenb-i]=b1[i]-'0';
lenc=1;
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]-b[lenc];
if(c[lenc]<0)
{
a[lenc+1]-=1;
c[lenc]+=10;
}
lenc++;
}
while(c[lenc]==0&&lenc>0)
lenc--;
if(sign)
printf("-");
for(int i=lenc;i>=1;i--)
printf("%d",c[i]);
return 0;
}
乘法:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int lena,lenb,lenc,tmp,k;
char a1[1010],b1[1010];
int a[1010],b[1010],c[1010];
int main()
{
scanf("%s%s",a1,b1);
lena=strlen(a1);
lenb=strlen(b1);
for(int i=0;i<lena;i++)
a[lena-i]=a1[i]-'0';
for(int i=0;i<lenb;i++)
b[lenb-i]=b1[i]-'0';
tmp=k=1;
for(int i=1;i<=lena;i++)
{
tmp=k;
for(int j=1;j<=lenb;j++)
{
c[tmp]+=a[i]*b[j];
if(c[tmp]>=10)
{
c[tmp+1]+=c[tmp]/10;
c[tmp]%=10;
}
tmp++;
}
k++;
lenc=tmp;
}
if(c[lenc]==0&&lenc>0)
lenc--;
for(int i=lenc;i>=1;i--)
printf("%d",c[i]);
return 0;
}