31 条题解

  • 0
    @ 2025-7-24 15:50:23
    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;
    }
    string h(string n,char w,string m)
    {
        if(w=='+') return jia(n,m);
        if(w=='*') return cheng(n,m);
        if(w=='-') return jian(n,m);
    }
    

    信息

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