检查一下如果s的长度为1的时候
by moment0303 @ 2023-07-15 16:22:15
@[moment0303](/user/1040790) 啥意思呀 ?_?
by chieftains @ 2023-07-15 17:21:25
@[moment0303](/user/1040790) 是说只输入1个数字吗?如果只输入一个数字它就是照常输出
by chieftains @ 2023-07-15 17:27:39
@chieftains搞错了,是输出前面有空格
by moment0303 @ 2023-07-16 12:35:51
Ac了,看看注释
```
#include<iostream>
using namespace std;
int main()
{
int flag = 0;
string s;
cin >> s;
//排除特殊情况
if(s.size()<2) {
cout<<s;
}
else if(s.size()==2 and s[0]=='-') {
cout<<s;
}
else if (s[0] == '-') {
for (int i = 1; i <= s.size() / 2; i++) {
swap(s[i], s[s.size() - i ]);
}
//原代码去0有问题
//修改:
if(s[1]=='0'){
int j=1;
while (s[j]=='0'){
for(int i=j;i<s.size();i++){
s[i]=s[i+1];
}
}
}
for (int i = 0; i <= s.size(); i++) {
cout << s[i];
}
}
else {
for (int i = 0; i <= s.size()/2-1; i++) {//原代码 是 i <= s.size()/2,当有四个元素时,会访问前三个即下标0,1,2与4,3,2交换,会有空格在前方,所以减一就可以
swap(s[i], s[s.size() - i-1]);//这里减一
}
if (s[0] == '0'){ //看了大佬的代码,本意去0,但是失败了,不理解 原因 810颠倒后是018有前置0,要消除
int j=0;
while (s[j]=='0'){
for(int i=j;i<s.size();i++){
s[i]=s[i+1];
}
}
}
for (int i = 0; i <= s.size(); i++) {
cout << s[i];
}
//cout<<s; 想直接输出,但是莫名最后一位会丢掉,不理解+2
//现在好啦
}
return 0;
}
```
by moment0303 @ 2023-07-16 12:45:38
![去0有问题](C:\Users\Administrator\Desktop\xxx.png)
![题解中使用这个方法去0时会提前去负号,而源代码没有](C:\Users\Administrator\Desktop\xxxxx.png)
by moment0303 @ 2023-07-16 12:49:32
这个方法去0要求第一个元素是0,然而你的第一个是负号,所以失败了;题解里是s1=-00000xxxxxxxxx
s2=00000xxxxxxxxx
用s2执行操作就不翻车了
我改的代码是用循环的,新手可以理解
by moment0303 @ 2023-07-16 12:54:58
以后尽量简洁代码
by moment0303 @ 2023-07-16 12:56:01
@[moment0303](/user/1040790) 好的大佬,我明白了OvO感谢!!
by chieftains @ 2023-07-16 15:01:57
《大佬》
by moment0303 @ 2023-07-16 15:36:42