SPOJ问题ADDREV-添加反转数字(我得到一个错误的答案,考虑到我的代码,这是荒谬的……)

时间:2019-01-12 14:21:55

标签: c++

我试图使用字符串来解决这个问题,但是我在编译器上得到了正确的测试用例答案,但是spoj说了错误的答案。

我尝试了隐藏测试用例0,0并进行了处理,但我仍然得到了错误的答案

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long int t=0,x=0,y=0,z=0,i=0;
    cin>>t;
    string s1,s2,s3;
    while(t--)
    {
        cin>>s1>>s2;
        reverse(s1.begin(),s1.end());
        reverse(s2.begin(),s2.end());
        x=stoi(s1);
        y=stoi(s2);
        z=x+y;
        s3=to_string(z);
        if(z!=0)
        {   
                for(i=0;s3[i]!='\0';i++)
            {
                if(s3[i]=='0')
                {
                    s3[i]='\0';
                    break;
                }       
            }
                reverse(s3.begin(),s3.end());
        }
        cout<<s3<<endl;
    }
}

我在编译器上得到了正确的答案,但是当我在spoj上提交相同的代码时,我得到了错误的答案。这可能是因为网站期望的答案是int,并且我已经将Answer打印为String吗?

1 个答案:

答案 0 :(得分:1)

在将其转换为字符串之前,应先从z整数的末尾删除0

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long int t=0,x=0,y=0,z=0,i=0;
    cin>>t;
    string s1,s2,s3;
    while(t--)
    {
        cin>>s1>>s2;
        reverse(s1.begin(),s1.end());
        reverse(s2.begin(),s2.end());
        x=stoi(s1);
        y=stoi(s2);
        z=x+y;
        while(z%10==0)
            {
                z=z/10;

              }
        s3=to_string(z);

           reverse(s3.begin(),s3.end());

        cout<<s3<<endl;
    }
}