样例能过,提交30

P1307 [NOIP2011 普及组] 数字反转

KANO07 @ 2023-08-03 14:47:59

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string n, out = "";
    cin >> n;
    int a = n.size() - 1;
    //为0情况
    if(n=="0")
    {
        cout << 0;
        return 0;
    }
    //去除末尾0
    if (n[a] == '0')
    {
        n.pop_back();
        while (n[a - 1] == '0')
        {
            n.pop_back();
            a--;
        }
    }
    //翻转
    for (int i = 0; i <= a; i++)
    {
        out =n[i] + out;
    }
    //负数情况
    if (n[0] == '-')
    {
    out.pop_back();
    out = '-'+out;
    }
    cout << out;
    return 0;
}

by Cryflmind @ 2023-08-03 15:14:27

事实上……似乎是你的输出有点问题
这有一组数据样例:
输入:
-12345000
预计输出:
-54321
你的程序输出:
-(一个方块,未知数据)54321


by Cryflmind @ 2023-08-03 15:24:00

可能的错误在翻转的位置:你上面去除0的时候判断的是a-1是不是0,所以当a-1不为0的时候a就会停止变化,所以a此时的位置应该是在字符串末尾后1个字符。而你下方翻转部分的代码却是直接遍历到a,导致最后n[a]也被加入了答案字符串,但这是不应该被加入的。


by Cryflmind @ 2023-08-03 15:31:17

@Cryflmind 但是直接这样修改又会出现一个错误:
输入:
100109
答案:
901001
程序输出:
01001


by KANO07 @ 2023-08-03 15:36:25

@Cryflmind 我把翻转的i <= a;改成了i <= n.size() - 1;就过了.请问-(一个方块,未知数据)54321是怎么看到的?我直接在调试台看是-54321


by Cryflmind @ 2023-08-03 15:39:24

@KANO07 直接在菜鸟的在线工具运行下就行了


by jh2023 @ 2023-08-13 17:06:34

其实用stoi就非常简单


|