不知道哪里有问题。。

P1307 [NOIP2011 普及组] 数字反转

冬笙夏洛_ @ 2021-08-21 17:37:37

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main() {
    string str; cin >> str;
    int n = str.size() - 1;
    //如果数字是 0
    if (n == 0 && str[0] == '0') {
        cout << 0 << endl; return 0;
    }
    //先去掉 后置0
    while (str[n] == '0') {
        str[n] = '\0';
        n--;
    }
    //有 负号就保留负号
    if (str[0] == '-')reverse(str.begin() + 1, str.end());
    else reverse(str.begin(), str.end());
    cout << str << endl;

    return 0;
}

by Ninelife_Cat @ 2021-08-21 17:41:05

@冬笙夏洛_

input:-1000
output:-1
您的输出:-   1

您把后导 0 去掉之后 str 的长度并没有改变


by liuzimingc @ 2021-08-21 17:41:55

while (str[n] == '0') {
        str[n] = '\0';
        n--;
    }

这里,程序会输出 \0


by liuzimingc @ 2021-08-21 17:42:29

而且这个数据范围不能直接用 int 吗(


by 冬笙夏洛_ @ 2021-08-21 17:51:15

@Ninelife_Cat 我程序上输出的是-1,字符串末尾变成'\0'之后,str的长度会发生变化


by 冬笙夏洛_ @ 2021-08-21 17:53:53

@liuzimingc 可以说的详细一点点吗,不太懂


by Ninelife_Cat @ 2021-08-21 18:13:40

@冬笙夏洛_

if (str[0] == '-')reverse(str.begin() + 1, str.begin() + n + 1);
    else reverse(str.begin(), str.begin() + n + 1);

改成这样就行了


by 冬笙夏洛_ @ 2021-08-21 18:49:14

@Ninelife_Cat 还真是str.end()出现问题了。。。谢谢大佬


|