高精度
输入
void Input(long long a[])
{
char s[10005];
scanf("%s",s);
long long len=strlen(s);
for(long long i=1;i<=len;i++)
{
a[i]=s[len-i]-'0';
}
}
进、借位
加法
c[i]=a[i]+b[i];
if(c[i]>=10)
{
c[i]%=10;
c[i+1]++;
}
减法
if(a[i]<b[i])
{
a[i+1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
乘法
c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
x=c[i+j-1]/10;
c[i+j-1]%=10;
AC代码+注释
加法
#include
using namespace std;
long long a[10005],b[10005],c[10005],lena,lenb,lenc,x=0;
char a1[10005],b1[10005];
int main()
{
scanf("%s %s",a1,b1);
lena=strlen(a1);
lenb=strlen(b1);
for(long long i=0;i<=lena-1;i++)
{
a[lena-i]=a1[i]-48;
}
for(long long i=0;i<=lenb-1;i++)
{
b[lenb-i]=b1[i]-48;
}
for(lenc=1;lenc<=lena||lenc<=lenb;lenc++)
{
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]%=10;
}
c[lenc]=x;
if(!c[lenc])
{
lenc--;
}
for(long long i=lenc;i>=1;i--)
{
printf("%lld",c[i]);
}
return 0;
}
减法
#include
using namespace std;
long long a[10005],b[10005],c[10005],lena,lenb,lenc;
char n[10005],n1[10005],n2[10005];
int main()
{
scanf("%s %s",n1,n2);
if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))
{
strcpy(n,n1);
strcpy(n1,n2);
strcpy(n2,n);
printf("-");
}
lena=strlen(n1);
lenb=strlen(n2);
for(long long i=0;i<=lena-1;i++)
{
a[lena-i]=n1[i]-48;
}
for(long long i=0;i<=lenb-1;i++)
{
b[lenb-i]=n2[i]-48;
}
for(lenc=1;lenc<=lena||lenc<=lenb;lenc++)
{
if(a[lenc]<b[lenc])
{
a[lenc]+=10;
a[lenc+1]--;
}
c[lenc]=a[lenc]-b[lenc];
}
while((!c[lenc])&&(lenc>1))
{
lenc--;
}
for(long long i=lenc;i>=1;i--)
{
printf("%lld",c[i]);
}
return 0;
}
乘法
#include
using namespace std;
long long a[10005],b[10005],c[10005],lena,lenb,lenc,x;
char a1[10005],b1[10005];
int main()
{
scanf("%s %s",a1,b1);
lena=strlen(a1);
lenb=strlen(b1);
for(long long i=0;i<=lena-1;i++)
{
a[lena-i]=a1[i]-48;
}
for(long long i=0;i<=lenb-1;i++)
{
b[lenb-i]=b1[i]-48;
}
for(long long i=1;i<=lena;i++)
{
x=0;
for(long long j=1;j<=lenb;j++)
{
c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
x=c[i+j-1]/10;
c[i+j-1]%=10;
}
c[i+lenb]=x;
}
lenc=lena+lenb;
while(!c[lenc]&&lenc>1)
{
lenc--;
}
for(long long i=lenc;i>=1;i--)
{
printf("%lld",c[i]);
}
return 0;
}