32 条题解

  • 0
    @ 2025-7-24 15:50:23
    #include <bits/stdc++.h>
    using namespace std;
    string n,m;
    string cheng(string n,string m)
    {
        string k="";
        int *a,*b,*f,la=n.size(),lb=m.size(),lf=la+lb;
        a=new int[la+1];
        b=new int[lb+1];
        f=new int[lf+1];
        for(int i=1;i<=la;i++) a[i]=0;
        for(int i=1;i<=lb;i++) b[i]=0;
        for(int i=1;i<=lf;i++) f[i]=0;
        for(int i=la-1;i>=0;i--) a[la-i]=n[i]-'0';
        for(int i=lb-1;i>=0;i--) b[lb-i]=m[i]-'0';
        for(int i=1;i<=la;i++)
            for(int j=1;j<=lb;j++)
                f[i+j-1]+=a[i]*b[j];
        for(int i=1;i<=lf;i++)
        {
            f[i+1]+=f[i]/10;
            f[i]%=10;
        }
        while(f[lf]==0&&lf>1) lf--;
        for(int i=lf;i>=1;i--) k=k+char(f[i]+'0');
        return k;
    }
    string jia(string n,string m)
    {
        string k="";
        int *f,*a,*b,la=n.size(),lb=m.size(),lf=max(la,lb)+1;
        a=new int[lf+1];
        b=new int[lf+1];
        f=new int[lf+1];
        for(int i=1;i<=lf;i++) a[i]=0;
        for(int i=1;i<=lf;i++) b[i]=0;
        for(int i=1;i<=lf;i++) f[i]=0;
    	for(int i=1;i<=la;i++) a[i]=n[la-i]-'0';
    	for(int i=1;i<=lb;i++) b[i]=m[lb-i]-'0';
    	for(int i=1;i<=lf;i++)
    	{
    		f[i]+=a[i]+b[i];
    		if(f[i]>=10)
    		{
    			f[i]-=10;
    			f[i+1]++;
    		}
    	}
    	if(f[lf]==0) lf--;
        for(int i=lf;i>=1;i--) k=k+char(f[i]+'0');
        return k;
    }
    string jian(string n,string m)
    {
        string k="";
        int *a,*b,*f,la=n.size(),lb=m.size(),lf;
        if(lb>la||la==lb&&n<m)
        {
            swap(n,m);
            swap(la,lb);
            cout<<'-';
        }
        lf=la;
        a=new int[lf+1];
        b=new int[lf+1];
        f=new int[lf+1];
        for(int i=1;i<=lf;i++) a[i]=0;
        for(int i=1;i<=lf;i++) b[i]=0;
        for(int i=1;i<=lf;i++) f[i]=0;
        for(int i=1;i<=la;i++) a[i]=n[la-i]-'0';
    	for(int i=1;i<=lb;i++) b[i]=m[lb-i]-'0';
        for(int i=1;i<=lf;i++)
        {
            if(a[i]<b[i])
            {
                a[i+1]--;
                a[i]+=10;
            }
            f[i]=a[i]-b[i];
        }
        while(f[lf]==0&&lf>1) lf--;
        for(int i=lf;i>=1;i--) k=k+char(f[i]+'0');
        return k;
    }
    int sub(int *a,int *b,int La,int Lb)
    {
        if(La<Lb) return -1;
        if(La==Lb)
        {
            for(int i=La-1;i>=0;i--)
                if(a[i]>b[i]) break;
                else if(a[i]<b[i]) return -1;
    
        }
        for(int i=0;i<La;i++)
        {
            a[i]-=b[i];
            if(a[i]<0) a[i]+=10,a[i+1]--;
        }
        for(int i=La-1;i>=0;i--)
            if(a[i]) return i+1;
        return 0;
    
    }
    string div(string n1,string n2,bool nn)
    {
        const int L=1e5;
        string s,v;
        int a[L],b[L],r[L],La=n1.size(),Lb=n2.size(),i,tp=La;
        fill(a,a+L,0);fill(b,b+L,0);fill(r,r+L,0);
        for(i=La-1;i>=0;i--) a[La-1-i]=n1[i]-'0';
        for(i=Lb-1;i>=0;i--) b[Lb-1-i]=n2[i]-'0';
        if(La<Lb||(La==Lb&&n1<n2))
        {
            if(nn) return "0";
                else return n1;
        }
        int t=La-Lb;
        for(int i=La-1;i>=0;i--)
           if(i>=t) b[i]=b[i-t];
           else b[i]=0;
        Lb=La;
        for(int j=0;j<=t;j++)
        {
            int temp;
            while((temp=sub(a,b+j,La,Lb-j))>=0)
            {
                La=temp;
                r[t-j]++;
            }
        }
        for(i=0;i<L-10;i++) r[i+1]+=r[i]/10,r[i]%=10;
        while(!r[i]) i--;
        while(i>=0) s+=r[i--]+'0';
        i=tp;
        while(!a[i]) i--;
        while(i>=0) v+=a[i--]+'0';
        if(v.empty()) v="0";
        if(nn==1) return s;
        else return v;
    }
    string h(string n,char w,string m)
    {
        if(w=='+') return jia(n,m);
        else if(w=='*') return cheng(n,m);
        else if(w=='-') return jian(n,m);
        else if(w=='/') return div(n,m,1);
        else return div(n,m,0);
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0),cout.tie(0);
        cin>>n>>m;
        cout<<h(n,'+',m)<<endl;
        cout<<h(n,'-',m)<<endl;
        cout<<h(n,'*',m)<<endl;
        cout<<h(n,'/',m)<<endl;
        cout<<h(n,'%',m);
        return 0;
    }
    

    信息

    ID
    1
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    (无)
    递交数
    535
    已通过
    284
    上传者