miyou379 @ 2022-07-18 23:37:28
#include <bits/stdc++.h>
using namespace std;
stack<int> s;
char h[13] = {};
int flag = 0;
int lgth;
int main() {
scanf("%s", &h);
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]);
}
//输出
if (s.top() != '0') {
printf("%c", s.top());
s.pop();
} else {
s.pop();
lgth -= 1;
}
for (int p = 1; p <= lgth; p++) {
printf("%c", s.top());
s.pop();
}
return 0;
}
如题,输入数据为-980时能够正常运行,答案正确,若输入-98则会返回3221225477.不带负号的情况是一样的,个人感觉是输出注释下面那个if有问题,请求各位神犇帮助 提交界面5个AC 3个WA 3个RE
by 035966_L3 @ 2022-07-18 23:44:23
[Line 10] scanf("%s", &h);
应去掉 &h
中的 &
。
by Martin8521 @ 2022-07-18 23:48:15
@miyou379
在你的程序第23到第29行中,如果字符串结尾不是0仍会弹栈,导致后面在访问栈顶时会发生内存越界,将栈顶不为0的判断删掉就行
by Martin8521 @ 2022-07-18 23:50:13
而且你只判断了一次结尾为0的情况,应当改为
while (s.top() == '0') {
s.pop();
lgth -= 1;
}
同时应当对输入为0时进行特判
by Martin8521 @ 2022-07-18 23:52:50
@miyou379
AC程序是这样的
#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 miyou379 @ 2022-07-19 00:11:56
@Martin8521 谢谢,学到了!
by miyou379 @ 2022-07-19 00:12:20
@035966_L3 感谢更正,已纠正