冬笙夏洛_ @ 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()出现问题了。。。谢谢大佬