1.高精度数的表示
用一个数组表示一个高精度数:将数字按十进制位分离,每位十进制数依次存储到一个数组中
int a[100]={0};
int n;
string s;
cin>>s;
n=s.length();
for(i=0;i<n;i++)
a[i]=s[n-i-1]-'0';//数组a从右到左按位存储
2.
(1)高精度数加和减
n1为x的位数,n2为y的位数
for(i=0;i<(n1>n2?n1:n2);i++)
a[i]=a[i]+b[i];
if(a[i]>9)
{
a[i]=a[i]-10;
a[i+1]++;
}
n为x的位数。若想x<y,数组a和b互换,相减后的差取负
for(i=0;i<n;i++)
{
if(a[i]>b[i])
a[i]=a[i]-b[i];
else
{
a[i]=a[i]+10-b[i];
a[i+1]--;
}
}
(2)高精度数的乘和除
首先要确定积的位数,设两个高精度正整数a和b,La和Lb为其位数。a和b乘积的位数至少为La+Lb-1,若有进位则位数为La+Lb。及位数上限为La+Lb;
for(i=0;i<La-1;i++)
for(j=0;j<Lb-1;j++)
c[i+j]+=a[i]*b[j];
for(i=0;i<La+Lb;i++)
if(c[i]>=10)
{
c[i+j]+=c[i]/10;
c[i]%=10;
}