全wa求解答

P1307 [NOIP2011 普及组] 数字反转

检查一下如果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


|