[ACM 学习] 高精度计算

发布时间:2024年01月14日

低位在下标为0的数组那,代码都是用了繁凡的ACM模板。

加法

c = a+b

g||i<a.len||i<b.len 这个设定是直的好,再也不用担心两个数组的长度了,也不用担心c的数组长度。

{
    int c[N];
    clen = 0;
    for(int i=0,g=0; g||i<a.len||i<b.len ; i++)
    {
        int x=g;
        if(i<a.len) x+=a[i];
        if(i<b.len) x+=s[i];
        c[clen++] = x%10;
        g=x/10;
    }
    return c;
}

    

减法

c = a-b

{
    int c[N];
    int clen=0;
    int x;
    for (int i=0,g=0;i<alen ; i++)
{
    x=a[i]-g;
    if (i<b.len) x-=b[i];
    if (x>=0) g=0;
    else{
        x+=10;
        g=1;
    }
    c[clen++]=x;
}
    while (clen>1 && !s[len-1]) len--;
    return c;
}

乘法

c = a*b

{
    int c[N];
    int clen = alen+blen;
    for(int i=0;i<alen;i++)
    {
        for(int j=0;j<blen;j++)
        {
            c[i+j]+=a[i]*b[j];
        }
    }
    for(int i=0;i<clen-1;i++)
    {
        c[i+1]+=c[i]/10;
        c[i]=c[i]%10;
    }
    while(clen >1 && !c[clen-1]) clen--;
    return c;
}

两个数进行比较

先比长度,长度相同,从高位到低位进行比较。

文章来源:https://blog.csdn.net/weixin_73512213/article/details/135587048
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。