30分,错误为超时,请求改法。
查看原帖
30分,错误为超时,请求改法。
1445261
Wang_Neil楼主2024/9/11 23:59
#include<bits/stdc++.h>
using namespace std;
int big(string a,string b)
{
    string c;
    int lena,lenb,x,y,result=1;//1代表大于,-1代表小于,0代表等于
    lenb=b.length();
    lena=a.length();
    if (lena > lenb) {return result;}
    else if (lenb > lena) {result=-1;}
    else
    {
        for (int i=0;i<=lena-1;i++)//比两个数字的大小
        {
            x=int(a[i]-'0');
            y=int(b[i]-'0');
            if (x==y && i==lena-1){result=0;}//说明两个数字相等
            else if (x>y) {break;}//说明a比b大
            else if (x<y)
            {
                result=-1;
                break;//说明b比a大
            }
            else{continue;}
        }
    }
    return result;
}

string add(string a,string b)
{
    string c;
    int d=0,lena,lenb,x,y;
    lena=a.length();
    lenb=b.length();
    if (lena > lenb)
    {
        for (int i = 1;i<=lena-lenb;i++){b='0'+b;}
    }

    else if (lenb > lena)
    {
        for (int i = 1;i<=lenb-lena;i++){a='0'+a;}
    }
    lenb=b.length();
    lena=a.length();
    for (int i=lena-1;i>=0;i--)
    {
        x=int(a[i]-'0');
        y=int(b[i]-'0');
        if (x+y+d >= 10)
        {
            c=char(x+y+d-10+'0')+c;
            d=1;
        }
        else
        {
            c=char(x+y+d+'0')+c;
            d=0;
        }
    }
    if (d==1){c='1'+c;}
    return c;
}

string difference(string a,string b)
{
    string c;
    int d=0,lena,lenb,x,y;
    lena=a.length();
    lenb=b.length();
    if (lena > lenb)
    {
        for (int i = 1;i<=lena-lenb;i++){b='0'+b;}
    }
    else if (lenb > lena)
    {
        for (int i = 1;i<=lenb-lena;i++){a='0'+a;}
    }
    lenb=b.length();
    lena=a.length();
    if (big(a,b)==0)
    {
        c="0";
        return c;
    }
    else if (big(a,b)==1)
    {
        for (int k=lena-1;k>=0;k--)
        {
            x=int(a[k]-'0')+d;
            y=int(b[k]-'0');
            if (x>=y)
            {
                c=char(x-y+'0')+c;
                d=0;
            }
            else
            {
                c=char(x-y+10+'0')+c;
                d=-1;
            }
        }
    }
    else if (big(a,b)==-1)
    {
        for (int k=lena-1;k>=0;k--)
        {
            x=int(b[k]-'0')+d;
            y=int(a[k]-'0');
            if (x>=y)
            {
                c=char(x-y+'0')+c;
                d=0;
            }
            else
            {
                c=char(x-y+10+'0')+c;
                d=-1;
            }
        }
    }
    while (int delta=-1)
    {
        delta++;
        if(c[delta]=='0') {c[delta]='\0';}
        else {break;}
    }
    if (big(a,b)==-1) {c='-'+c;}
    return c;
}

string product(string a,string b)
{
    string c;
    int lena,lenb,x,y,d=0,e;
    lena=a.length();
    lenb=b.length();
    for (int i=lenb-1;i>=0;i--)
    {
        string f="\0";
        x=int(b[i]-'0');
        for (int j=lena-1;j>=0;j--)
        {
            y=int(a[j]-'0');
            if (x==0 ){f="0";}
            e=x*y+d;
            for (int k=0;k<=9;k++)
            {
                if (e>=k*10 && e<(k+1)*10)
                {
                    d=k;
                    f=char(e-k*10+'0')+f;
                    break;
                }
            }
        }
        if (d!=0)
        {
            f=char(d+'0')+f;
            d=0;
        }
        int i1=lenb-i-1;
        while(i1>0)
        {
            i1--;
            f=f+'0';
        }
        c=add(c,f);
    }
    if (a=="0" || b=="0"){c="0";}
    return c;
}

string quotient(string a,string b)
{
    string c="0";
    if (big(a,b)==-1) {c="0";}
    else if (big(a,b)==0) {c="1";}
    else
    {
        while(true)
        {
            if (big(a,b)==1){
                a=difference(a,b);
                c=add(c,"1");
                continue;
            }
            else if (big(a,b)==0){
                c=add(c,"1");
                break;
            }
            else {break;}
        }
    }
    return c;
}
string remainder(string a,string b)
{
    string c="0",d;
    while(true)
    {
        if (big(a,b)==-1)
        {
            c=a;
            break;
        }
        else if (big(a,b)==0){break;}
        else
        {
            d=quotient(a,b);
            while(true)
            {
                d=difference(d,"1");
                a=difference(a,b);
                if (d=="0"){break;}
            }
            c=a;
            break;
        }
    }
    return c;
}

int main()
{
    string a,b;
    cin>>a>>b;
    cout<<add(a,b)<<endl;
    cout<<difference(a,b)<<endl;
    cout<<product(a,b)<<endl;
    cout<<quotient(a,b)<<endl;
    cout<<remainder(a,b);
}
2024/9/11 23:59
加载中...