问题标题: 酷町堂:教一下高精度

0
1

0
已采纳
范浩轩
范浩轩
资深守护
资深守护

 

int a[1000],b[1000],c[1000];
string PLUS(string x,string y)
{
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    a[0]=x.size(),b[0]=y.size();
    c[0]=max(a[0],b[0]);
    for(int i=1;i<=a[0];i++)
    {
        a[i]=x[a[0]-i]-'0';
    }
    for(int i=1;i<=b[0];i++)
    {
        b[i]=y[b[0]-i]-'0';
    }
    int jw=0;
    for(int i=1;i<=c[0];i++)
    {
        c[i]=a[i]+b[i]+jw;
        jw=c[i]/10;
        c[i]%=10;
    }
    if(jw!=0)
    {
        c[++c[0]]++;
    }
    string s="";
    for(int i=c[0];i>=1;i--)
    {
        s+=c[i]+'0';
    }
    return s;
}

这是加法的

———————————————————————————————————————————————————————

 


int a[1005],b[1005],c[1000005];
string PLUS(string x,string y)
{
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    a[0]=x.size(),b[0]=y.size();
    c[0]=a[0]+b[0]-1;
    for(int i=1;i<=a[0];i++)
    {
        a[i]=x[a[0]-i]-'0';
    }
    for(int i=1;i<=b[0];i++)
    {
        b[i]=y[b[0]-i]-'0';
    }
    for(int i=1;i<=a[0];i++)
    {
        for(int j=1;j<=b[0];j++)
        {
            c[i+j-1]+=a[i]*b[j];
        }
    }
    for(int i=1;i<=c[0];i++)
    {
        c[i+1]+=c[i]/10;
        c[i]%=10;
    }
    if(c[c[0]+1]!=0)
    {
        c[0]++;
    }
    string s="";
    for(int i=c[0];i>=1;i--)
    {
        s+=c[i]+'0';
    }
    while(s.size()!=1&&s[0]=='0')
    {
        s.erase(0,1);
    }
    return s;
}

这是乘法的

———————————————————————————————————————————————————————

int a[10005],b[10005],c[10005];
string MINUS(string x,string y)
{
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    a[0]=x.size(),b[0]=y.size();
    c[0]=a[0];
    for(int i=1;i<=a[0];i++)
    {
        a[i]=x[a[0]-i]-'0';
    }
    for(int i=1;i<=b[0];i++)
    {
        b[i]=y[b[0]-i]-'0';
    }
    for(int i=1;i<=c[0];i++)
    {
        if(a[i]<b[i])
        {
            a[i+1]--;
            a[i]+=10;
        }
        c[i]=a[i]-b[i];
    }
    string s="";
    for(int i=c[0];i>=1;i--)
    {
        s+=c[i]+'0';
    }
    while(s[0]=='0'&&s.size()!=1)
    {
        s.erase(0,1);
    }
    return s;
}

这是减法的

注意:所有高精度都要用到头文件:

#include<cstring>
0
0
0
被禁言 任熠同
任熠同
修练者
修练者

这个……我……好像……

就是把数字当成字符串

要代码吗?

我要回答