数组应用——高精度运算的实验范例

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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值