没有0反而会报3221225477的奇妙代码

P1307 [NOIP2011 普及组] 数字反转

```cpp [Line 10] scanf("%s", &h); ``` 应去掉 `&h` 中的 `&`。
by 035966_L3 @ 2022-07-18 23:44:23


@[miyou379](/user/254609) 在你的程序第23到第29行中,如果字符串结尾不是0仍会弹栈,导致后面在访问栈顶时会发生内存越界,将栈顶不为0的判断删掉就行
by Martin8521 @ 2022-07-18 23:48:15


而且你只判断了一次结尾为0的情况,应当改为 ```cpp while (s.top() == '0') { s.pop(); lgth -= 1; } ``` 同时应当对输入为0时进行特判
by Martin8521 @ 2022-07-18 23:50:13


@[miyou379](/user/254609) AC程序是这样的 ```cpp #include <bits/stdc++.h> using namespace std; stack<int> s; char h[13] = {}; int flag = 0; int lgth; int main() { scanf("%s", &h); if(h[0] == '0'){ cout << "0"; return 0; } lgth = strlen(h); if (h[0] == '-') { flag = 1; for (int j = 1; j <= lgth - 1; j++) s.push(h[j]); lgth -= 1; printf("-"); } else { for (int m = 0; m <= lgth - 1; m++) s.push(h[m]); } //输出 while (s.top() == '0') { s.pop(); lgth -= 1; } for (int p = 1; p <= lgth; p++) { printf("%c", s.top()); s.pop(); } return 0; } ```
by Martin8521 @ 2022-07-18 23:52:50


@[Martin8521](/user/577302) 谢谢,学到了!
by miyou379 @ 2022-07-19 00:11:56


@[035966_L3](/user/365654) 感谢更正,已纠正
by miyou379 @ 2022-07-19 00:12:20


|