首页 > 解决方案 > SPOJ 问题 ADDREV - 添加反转数字(考虑到我的代码,我得到了一个错误的答案,这很荒谬......)

问题描述

我尝试使用字符串来做这个问题,我在编译器上得到了测试用例的正确答案,但 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 吗?

标签: c++

解决方案


您应该先从 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;
    }
}

推荐阅读