[ad_1]
这是我的完整代码
<pre>#include <iostream> #include <string> using namespace std; int main() { int T; cin >> T; while(T--) { string str; cin >> str; int index=-1; for(int i=1;i<str.size();++i) { if(str[i]!='0') { index=i+1; break; } } string a=str.substr(0,index-1); string b=str.substr(index-1); int str_a=stoi(a); int str_b=stoi(b); if(str_b>str_a) { cout << str_a << " " << str_b << endl; } else { cout << "-1" << endl; } } return 0; }
我尝试过的:
如果我测试 5 个测试用例,那就没问题,当我测试 1000 个测试用例时,它会显示“退出代码为 3,运行时错误”。 为什么这么说呢? 其背后的原因是什么? 我该如何解决这个问题?
解决方案1
编译通过并不意味着你的代码是正确的! :笑:
将开发过程视为编写电子邮件:成功编译意味着您使用正确的语言(例如英语,而不是德语)编写了电子邮件,而不是电子邮件包含您想要发送的消息。
现在您进入了开发的第二阶段(实际上是第四或第五阶段,但稍后您将进入早期阶段):测试和调试。
首先看看它做了什么,以及它与您想要的有何不同。 这很重要,因为它为您提供了有关这样做的原因的信息。 例如,如果一个程序打算让用户输入一个数字,然后将其加倍并打印答案,那么如果输入/输出如下所示:
Input Expected output Actual output 1 2 1 2 4 4 3 6 9 4 8 16
那么很明显,问题在于将其加倍的位 – 它不是将自身与自身相加,或将其乘以 2,而是将其与自身相乘并返回输入的平方。
因此,您可以查看代码,很明显它位于此处:
private int Double(int value) { return value * value; }
一旦您知道可能出了什么问题,就开始使用调试器来找出原因。 在方法的第一行放置一个断点,然后运行您的应用程序。 当到达断点时,调试器将停止,并将控制权交给您。 现在,您可以逐行运行代码(称为“单步执行”),并根据需要查看(甚至更改)变量内容(哎呀,您甚至可以更改代码,然后根据需要重试)。
在执行代码之前,请考虑代码中的每一行应该执行的操作,并将其与使用“Step over”按钮依次执行每一行时实际执行的操作进行比较。 它达到了你的预期吗? 如果是这样,请转到下一行。
如果没有,为什么不呢? 有什么不同?
希望这可以帮助您找到代码的哪一部分有问题以及问题是什么。
这是一项技能,而且非常值得培养,因为它可以帮助您在现实世界中以及在开发中。 和所有技能一样,它只会通过使用而提高!
解决方案2
需要检查的一些事项:
1)如果输入字符串中没有“0”会发生什么?
2) 如果传递给 stoi() 的字符串大于 INT_MAX 会发生什么?
[ad_2]
コメント