本机测试会出结果,交上去就会出现奇奇怪怪的字符

P1303 A*B Problem

Chen_Py @ 2018-08-09 20:43:41

本代码在本机测试还行,在线IDE表示TLE,提交就出现奇奇怪怪的结果+RE,求助各位大佬!

#include<bits/stdc++.h>
#include<stdio.h>
#include<cstring>
using namespace std;
struct bign
{
    int len;
    bool fu=0;
    string str;
    void getlen()
    {
        len=str.length();
        return;
    }
    bign operator +(bign tmp)
    {
        bign ans;
        int cf,temp;
        if(len>tmp.len)
        {
            for(int i=1;i<=len-tmp.len;i++)
            {
                tmp.str="0"+tmp.str;
            }
            tmp.getlen();
        }
        else if(len<tmp.len)
        {
            for(int i=1;i<=tmp.len-len;i++)
            {
                str='0'+str;
            }
            getlen();
        }
        for(int i=len-1;i>=0;i--)
        {
            temp=str[i]-'0'+tmp.str[i]-'0';
            temp+=cf;
            cf=temp/10;
            temp%=10;
            ans.str=(char)(temp+'0')+ans.str;
        }
        if(cf)ans.str=(char)(cf+'0')+ans.str;
        ans.getlen();
        return ans;
    }
    bool operator <(const bign tmp)const
    {
        if(len!=tmp.len)return len<tmp.len;
        for(int i=0;i<len;i++)if(str[i]!=tmp.str[i])return str[i]<tmp.str[i];
        return 0;
    }
    bign operator -(bign tmp)
    {
        bign ans;
        if(*this<tmp)
        {
            ans.fu=1;
            for(int i=1;i<=tmp.len-len;i++)
            {
                str='0'+str;
            }
            getlen();
            for(int i=len-1;i>=0;i--)
            {
                if(tmp.str[i]>=str[i])
                ans.str=(char)(tmp.str[i]-str[i]+'0')+ans.str;
                else
                {
                    str[i-1]++;
                    ans.str=(char)(tmp.str[i]-str[i]+'0'+10)+ans.str;
                }
            }
        }
        else
        {
            ans.fu=0;
            for(int i=1;i<=len-tmp.len;i++)
            {
                tmp.str='0'+tmp.str;
            }
            tmp.getlen();
            for(int i=len-1;i>=0;i--)
            {
                if(str[i]>=tmp.str[i])
                ans.str=(char)(str[i]-tmp.str[i]+'0')+ans.str;
                else
                {
                    tmp.str[i-1]++;
                    ans.str=(char)(str[i]-tmp.str[i]+'0'+10)+ans.str;
                }
            }
        }
        int i;
        ans.getlen();
        for(i=0;ans.str[i]=='0'&&i<ans.len-1;i++);
        //cout<<i<<endl;
        ans.str.erase(0,i);
        return ans;
    }
    bign operator *(const int x)const
    {
        bign ans;
        int cf=0,temp=0;
        for(int i=len-1;i>=0;i--)
        {
            temp=cf;
            temp+=(str[i]-'0')*x;
            cf=temp/10;
            temp%=10;
            ans.str=(char)(temp+'0')+ans.str;
        }
        while(cf)
        {
            ans.str=(char)((cf%10)+'0')+ans.str;
            cf/=10;
        }
        ans.getlen();
        return ans;
    }
    bign operator *(bign tmp)
    {
        bign ans;
        string ling;
        bign temp;
        for(int i=len-1;i>=0;i--)
        {
            temp=tmp*(int)(str[i]-'0');
            temp.str=temp.str+ling;
            temp.getlen();
            ans=ans+temp;
            ling=ling+"0";
        }
        return ans;
    }
};
int main()
{
    bign a,b;
    cin>>a.str>>b.str;
    a.getlen();
    b.getlen();
    bign c=a*b;
    cout<<c.str<<endl;
    return 0;
}

by trueldc @ 2018-08-09 20:50:33

看你的头像我还以为是图灵测试......


|