主函数:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int a[1000],b[1000],c[1000];
void read(int a[])
void write(int a[]);
void add(int a[],int b[]);
int main()
{
read(a);
read(b);
add(a,b);
write(c);
}
输入输出:
void read(int a[])
{
string s;
cin>>s;
a[0]=s.size();
for(int i=0; i<a[0]; i++)
a[a[0]-i]=s[i]-'0';
}
void write(int a[])
{
for(int i=a[0]; i>=1; i--)
cout<<a[i];
cout<<endl;
}
加法:
void add(int a[],int b[])
{
memset(c,0,sizeof(c));
c[0]=a[0]>b[0]?a[0]:b[0];
int g=0;
for(int i=1; i<=c[0]; i++)
{
c[i]=a[i]+b[i]+g;
g=c[i]/10;
c[i]%=10;
}
if(g!=0)c[++c[0]]=g;
}
减法:
bool check(int a[],int b[])
{
if(a[0]>b[0])return false;
if(a[0]<b[0])return true;
for(int i=a[0]; i>=1; i--)
{
if(a[i]<b[i])
return true;
if(a[i]>b[i])
return false;
}
return false;
}
void subtract(int a[],int b[])
{
if(check(a,b))
{
int *p;//交换两个数组
p=a;
a=b;
b=p;
}
memset(c,0,sizeof(c));
for(int i=1; i<=a[0]; i++)
{
if(a[i]<b[i])
{
a[i]+=10;
a[i+1]--;
}
c[i]=a[i]-b[i];
}
//记录数组长度,末位清空
int len=a[0];
while(c[len]==0&&len!=1)len--;
c[0]=len;
}
乘法(高*单):
void multiply(int a[],int k)
{
memset(c,0,sizeof(c));
int g=0;
for(int i=1; i<=a[0]; i++)
{
c[i]=a[i]*k+g;
g=c[i]/10;
c[i]%=10;
}
int len=a[0];
while(g!=0)
{
c[++len]=g%10;
g/=10;
}
c[0]=len;
}
乘法(高*高):
void multiply(int a[],int b[])
{
memset(c,0,sizeof(c));
for(int i=1; i<=a[0]; i++)
for(int j=1; j<=b[0]; j++)
c[i+j-1]+=a[i]*b[j];
int len=a[0]+b[0]-1;
int g=0;
for(int i=1; i<=len; i++)
{
c[i]+=g;
g=c[i]/10;
c[i]%=10;
}
while(g!=0)
{
c[++len]=g%10;
g/=10;
}
c[0]=len;
}
高精度除单精度:
void divide(int a[],int k)
{
memset(c,0,sizeof(c));
int r=0;
for(int i=a[0]; i>=1; i--)
{
c[i]=a[i]+r*10;
r=c[i]%k;
c[i]/=k;
}
int len=a[0];
while(c[len]==0&&len!=1)len--;
c[0]=len;
}
高精度除高精度:
void divide(int a[],int b[])
{
memset(c,0,sizeof(c));
while(!check(a,b))
{
subtract(a,b);
add(c,1);
}
}
void subtract(int a[],int b[])
{
for(int i=1; i<=a[0]; i++)
{
if(a[i]<b[i])
{
a[i]+=10;
a[i+1]--;
}
a[i]-=b[i];
}
int len=a[0];
while(a[len]==0&&len!=1)len--;
a[0]=len;
}
void add(int a[],int k)
{
a[1]+=k;
int len=1;
while(a[len]>9)
{
a[len+1]+=a[len]/10;
a[len]%=10;
len++;
}
if(len>a[0])a[0]=len;
}
bool check(int a[],int b[])
{
if(a[0]>b[0])return false;
if(a[0]<b[0])return true;
for(int i=a[0]; i>=1; i--)
if(a[i]<b[i])return true;
return false;
}