大整数存储形式
整数的高位存储在数组的高位,整数的低位存储在数组的低位
高精度加法
#include<bits/stdc++.h>
using namespace std;
#define nmax 1000
int a[nmax];
int b[nmax];
int c[nmax];
int main()
{
string s1,s2;
cin>>s1>>s2;
int m=s1.length();
int n=s2.length();
for(int i=0;i<m;i++)
a[i]=s1[m-i-1]-'0';
for(int i=0;i<n;i++)
b[i]=s2[n-i-1]-'0';
int carry=0; //进位
int nn=0;
for(int i=0;i<m||i<n;i++)
{
int t=a[i]+b[i]+carry;
c[nn++]=t%10;
carry=t/10;
}
if(carry) //处理最高位的进位
c[nn++]=carry;
for(int i=0;i<nn;i++)
cout<<c[nn-i-1];
return 0;
}
高精度减法
#include<bits/stdc++.h>
using namespace std;
#define nmax 1000
int a[nmax];
int b[nmax];
int c[nmax];
int main()
{
string s1,s2;
cin>>s1>>s2;
int m=s1.length();
int n=s2.length();
for(int i=0;i<m;i++)
a[i]=s1[m-i-1]-'0';
for(int i=0;i<n;i++)
b[i]=s2[n-i-1]-'0';
int nn=0;
for(int i=0;i<m||i<n;i++)
{
if(a[i]<b[i])
{
a[i+1]--;
a[i]+=10;
}
c[nn++]=a[i]-b[i];
}
while(nn-1>=1&&c[nn-1]==0)
nn--; //去除最高位的0,同时至少保留一位
for(int i=0;i<nn;i++)
cout<<c[nn-i-1];
return 0;
}
高精度与低精度乘法
#include<bits/stdc++.h>
using namespace std;
#define nmax 1000
int a[nmax];
int c[nmax];
int main()
{
string s1;
int b;
cin>>s1;
cin>>b;
int m=s1.length();
for(int i=0;i<m;i++)
a[i]=s1[m-i-1]-'0';
int carry=0; //进位
int nn=0;
for(int i=0;i<m;i++)
{
int t=a[i]*b+carry;
c[nn++]=t%10;
carry=t/10;
}
while(carry) //处理最高位剩余进位
{
c[nn++]=carry%10;
carry/=10;
}
for(int i=0;i<nn;i++)
cout<<c[nn-i-1];
return 0;
}
高精度与低精度除法
#include<bits/stdc++.h>
using namespace std;
#define nmax 1000
int a[nmax];
int c[nmax];
int main()
{
string s1;
int b;
cin>>s1;
cin>>b;
int m=s1.length();
for(int i=0;i<m;i++)
a[i]=s1[m-i-1]-'0';
int r=0; //余数
int nn=m;
for(int i=m-1;i>=0;i--)
{
r=r*10+a[i];
if(r<b)
c[i]=0;
else
{
c[i]=r/b;
r=r%b;
}
}
while(nn-1>=1&&c[nn-1]==0) //去除最高位的0,同时至少保留一位最低位
nn--;
for(int i=0;i<nn;i++)
cout<<c[nn-i-1];
return 0;
}