大整数加法
代码实现:
#include<cstring>
#include<cstdio>
int main()
{
char a1[205],b1[205];
gets(a1);
gets(b1);
int lena=strlen(a1);
int lenb=strlen(b1);
int a[205],b[205];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<=lena-1;i++)
a[lena-i]=a1[i]-'0';
for(int i=0;i<=lenb-1;i++)
b[lenb-i]=b1[i]-'0';
int c[205];
memset(c,0,sizeof(c));
int lenc=1;
int x=0;
while(lenc<=lena||lenc<=lenb)
{
c[lenc]=a[lenc]+b[lenc]+x;
x=c[lenc]/10;
c[lenc]%=10;
lenc++;
}
c[lenc]=x;
while(c[lenc]==0&&lenc>1)
lenc--;
for(int i=lenc;i>=1;i--)
printf("%d",c[i]);
return 0;
}
大整数减法
代码实现:
#include<cstring>
#include<cstdio>
int main()
{
char n[205],n1[205],n2[205];
gets(n1);
gets(n2);
int lena=strlen(n1);
int lenb=strlen(n2);
int a[205]={},b[205]={},c[205]={};
if(lena<lenb||(lena==lenb&&strcmp(n1,n2)<0))
{
strcpy(n,n1);
strcpy(n1,n2);
strcpy(n2,n);
printf("-");
}
lena=strlen(n1);
lenb=strlen(n2);
for(int i=0;i<=lena-1;i++)
a[lena-i]=n1[i]-48;
for(int i=0;i<=lenb-1;i++)
b[lenb-i]=n2[i]-48;
int x=1;
while(x<=lena)
{
if(a[x]<b[x])
{
a[x]+=10;
a[x+1]--;
}
c[x]=a[x]-b[x];
x++;
}
int lenc=x;
while(c[lenc]==0&&lenc>1)
lenc--;
for(int i=lenc;i>=1;i--)
printf("%d",c[i]);
return 0;
}
大整数乘法
代码实现:
#include<cstdio>
#include<cstring>
int main()
{
char a1[200],b1[200];
gets(a1);
gets(b1);
int lena=strlen(a1);
int lenb=strlen(b1);
int a[200]={},b[200]={},c[400]={};
for(int i=0;i<lena;i++)
a[lena-i]=a1[i]-48;
for(int i=0;i<lenb;i++)
b[lenb-i]=b1[i]-48;
int x=0;
int lenc=0;
for(int i=1;i<=lena;i++)
{
x=0;
for(int 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]==0&&lenc>1)
lenc--;
for(int i=lenc;i>=1;i--)
printf("%d",c[i]);
}
大整数除法(高精除以低精)
代码实现:
#include<cstring>
#include<cstdio>
int main()
{
char a1[100];
int a[100]={},c[100]={};
int b,x=0,lenc;
gets(a1);
scanf("%d",&b);
int lena=strlen(a1);
for(int i=0;i<=lena-1;i++)
a[i+1]=a1[i]-48;
for(int i=1;i<=lena;i++)
{
c[i]=(x*10+a[i])/b;
x=(x*10+a[i])%b;
}
lenc=1;
while(c[lenc]==0&&lenc<lena)
lenc++;
for(int i=lenc;i<=lena;i++)
printf("%d",c[i]);
return 0;
}
大整数除法(高精除以高精)
代码实现:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
void bigchu(char *a,char *b,char *c,int& lc)
{
int la=strlen(a),lb=strlen(b),f1;
int i=0;
lc=0;
while(i<=la-lb)
{
f1=0;
c[lc]='0';
while(1)
{
if(i==0||a[i-1]=='0')
for(int j=i; j<i+lb; j++)
{
if(a[j]>b[j-i]) break;
if(a[j]<b[j-i])
{
f1=1;
break;
}
}
if(f1) break;
for(int j=lb-1; j>=0; j--)
if(a[i+j]>=b[j])
a[i+j]-=b[j]-'0';
else a[i+j]+=10-b[j]+'0',a[i+j-1]--;
c[lc]++;
}
if(c[lc]!='0'||i!=0) lc++;
i++;
}
}
int main()
{
char a[1000],b[1000],c[1000];
int lc;
cin>>a>>b;
bigchu(a,b,c,lc);
if(lc!=0)
for(int i=0; i<lc; i++)
cout<<c[i];
else cout<<0;
}