【发布时间】:2021-04-15 05:33:16
【问题描述】:
我是 C++ 的新手,我试图编写这个程序来使用字符串添加两个非常大的数字,但程序运行不正常,我不知道它有什么问题,请帮助我。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main() {
stack <char> a1;
stack<char> a2;
stack<int> result;
stack<int> temp;
int carry = 0;
string num1;
string num2;
cout << "Enter first number (both numbers should have equal digits)" << endl;
getline(cin, num1);
cout << "Enter second number" << endl;
getline(cin, num2);
for (int i = num1.size()-1; i >= 0; i--) {
a1.push(num1[i]);
a2.push(num2[i]);
}
while (!a1.empty() && !a2.empty()) {
int element = (int)a1.top() + (int)a2.top() + carry;
cout << element;
if (element > 10) {
element %= 10;
carry = 1;
}
result.push(element);
cout << result.top() << endl;
a1.pop();
a2.pop();
}
string abc;
while (!result.empty()) {
temp.push(result.top());
result.pop();
abc += temp.top();
}
cout << abc;
}
我知道我肯定犯了一个逻辑错误,但我无法理解,谁能指导我? 以下是我得到的输出
【问题讨论】:
-
您应该学习使用调试器并逐步执行您的代码。实际上,重新考虑您的代码并一次构建和测试一个部分是一个好主意。
-
这里有两个基本错误。一是这可以更简单地实现,无需使用任何堆栈。但真正的 bug 是你会惊讶地发现,例如,如果其中一个数字的最后一位是 1,那么堆栈顶部的数字就不会是 1。如果你添加一些调试语句到您的代码应该能够自己找出答案。成为一名有经验的 C++ 开发人员的关键是学习如何调试自己的代码,这是一个很好的学习机会。
-
代码中有几个错误。一方面,您将数字的 ascii 值存储在堆栈中,另一件事是您以相反的顺序将数字推入堆栈,因此堆栈的有用性丢失了。如果您使用调试器,您会看到所有这些
-
那我该如何摆脱它呢?就像我如何存储实际数字而不是 ASCII 等价物?我解决了向后循环的问题
标签: c++ string char stack addition