#include <iostream>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
bool is_number(const std::string& s)
{
return !s.empty() && std::find_if(s.begin(),
s.end(), [](char c) { return !std::isdigit(c); }) == s.end();
}
int main(int argc, const char * argv[])
{
stack<int> stack1, stack2, resultStack;
string input;
// Build stack 1
input = "455";
//cin >> input
if(!is_number(input))
std::cerr << "Not a number";
for (auto &c : input) {
stack1.push(c - '0');
}
// Build stack 2
input = "467";
if(!is_number(input))
std::cerr << "Not a number";
//cin >> input;
for (auto &c : input) {
stack2.push(c - '0');
}
int carry=0, op1=0, op2=0;
while (!stack1.empty() && !stack2.empty()) {
op1=0,op2=0;
if (stack1.empty() && stack2.empty()) break;
if (!stack1.empty()) { op1 = stack1.top(); stack1.pop(); }
if (!stack2.empty()) { op2 = stack2.top(); stack2.pop(); }
int opTotal = 0;
opTotal = op1 + op2 + carry;
std::cout << op1 << " + " << op2 << " + " << carry << " = " << opTotal << "\n";
resultStack.push(opTotal%10);
if (opTotal >= 10) carry = 1; else carry = 0;
}
cout << "\nResult is: ";
while (!resultStack.empty()) {
cout << resultStack.top();
resultStack.pop();
}
cout <<"\n\n";return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBpc19udW1iZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHMpCnsKICAgIHJldHVybiAhcy5lbXB0eSgpICYmIHN0ZDo6ZmluZF9pZihzLmJlZ2luKCksIAogICAgICAgIHMuZW5kKCksIFtdKGNoYXIgYykgeyByZXR1cm4gIXN0ZDo6aXNkaWdpdChjKTsgfSkgPT0gcy5lbmQoKTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCnsKICAgICAgICBzdGFjazxpbnQ+IHN0YWNrMSwgc3RhY2syLCByZXN1bHRTdGFjazsKICAgICAgICBzdHJpbmcgaW5wdXQ7CiAgICAgICAgCiAgICAgICAgLy8gQnVpbGQgc3RhY2sgMQogICAgICAgIGlucHV0ID0gIjQ1NSI7CiAgICAgICAgLy9jaW4gPj4gaW5wdXQKICAgICAgICBpZighaXNfbnVtYmVyKGlucHV0KSkKICAgICAgICAJc3RkOjpjZXJyIDw8ICJOb3QgYSBudW1iZXIiOwogICAgICAgIAogICAgICAgIGZvciAoYXV0byAmYyA6IGlucHV0KSB7CiAgICAgICAgIAlzdGFjazEucHVzaChjIC0gJzAnKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gQnVpbGQgc3RhY2sgMgogICAgICAgIGlucHV0ID0gIjQ2NyI7CiAgICAgICAgaWYoIWlzX251bWJlcihpbnB1dCkpCiAgICAgICAgCXN0ZDo6Y2VyciA8PCAiTm90IGEgbnVtYmVyIjsKICAgICAgICAKICAgICAgICAvL2NpbiA+PiBpbnB1dDsKICAgICAgICBmb3IgKGF1dG8gJmMgOiBpbnB1dCkgewogICAgICAgICAgIHN0YWNrMi5wdXNoKGMgLSAnMCcpOwogICAgICAgIH0KICAgICAgICAKCiAgICAgICAgCiAgICAgICAgaW50IGNhcnJ5PTAsIG9wMT0wLCBvcDI9MDsKICAgICAgICB3aGlsZSAoIXN0YWNrMS5lbXB0eSgpICYmICFzdGFjazIuZW1wdHkoKSkgewogICAgICAgICAgICAgICAgb3AxPTAsb3AyPTA7CiAgICAgICAgICAgICAgICBpZiAoc3RhY2sxLmVtcHR5KCkgJiYgc3RhY2syLmVtcHR5KCkpIGJyZWFrOwogICAgICAgICAgICAgICAgaWYgKCFzdGFjazEuZW1wdHkoKSkgeyBvcDEgPSBzdGFjazEudG9wKCk7IHN0YWNrMS5wb3AoKTsgfQogICAgICAgICAgICAgICAgaWYgKCFzdGFjazIuZW1wdHkoKSkgeyBvcDIgPSBzdGFjazIudG9wKCk7IHN0YWNrMi5wb3AoKTsgfQogICAgICAgICAgICAgICAgaW50IG9wVG90YWwgPSAwOwogICAgICAgICAgICAgICAgb3BUb3RhbCA9IG9wMSArIG9wMiArIGNhcnJ5OwogICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IG9wMSA8PCAiICsgIiA8PCBvcDIgPDwgIiArICIgPDwgY2FycnkgPDwgIiA9ICIgPDwgb3BUb3RhbCA8PCAiXG4iOwogICAgICAgICAgICAgICAgcmVzdWx0U3RhY2sucHVzaChvcFRvdGFsJTEwKTsKICAgICAgICAgICAgICAgIGlmIChvcFRvdGFsID49IDEwKSBjYXJyeSA9IDE7IGVsc2UgY2FycnkgPSAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBjb3V0IDw8ICJcblJlc3VsdCBpczogIjsKICAgICAgICB3aGlsZSAoIXJlc3VsdFN0YWNrLmVtcHR5KCkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgcmVzdWx0U3RhY2sudG9wKCk7CiAgICAgICAgICAgICAgICByZXN1bHRTdGFjay5wb3AoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY291dCA8PCJcblxuIjtyZXR1cm4gMDsKfQo=