/*
제 목 : 데이터구조 6주차 과제 stack을 활용한 덧셈계산기
기 능 : 두 개의 피연산자의 덧셈
파일이름 : 201622821_김영진_데이터구조_6주차과제.cpp
수정날짜 : 2020. 04. 29
작 성 자 : 김영진
*/
#include <iostream>
#include <stack>
#include <cmath>
using namespace std;
stack<int>st1, st2, st3;
int main(void) {
int num1 = 0, num2 = 0;
int count_1 = 0, count_2 = 0;
int count = 0;
int j = 0;
cin >> num1;
cin >> num2;
// ------------------------------- 첫 번째 피연산자 st1 대입
for (int i = 1; i <= num1; i *= 10) {
count_1++;
}
j = pow(10, count_1);
j = j / 10;
for (; j != 0; j /= 10) {
st1.push(num1 / j % 10);
}
// ------------------------------- 두 번째 피연산자 st2 대입
for (int i = 1; i <= num2; i *= 10) {
count_2++;
}
j = pow(10, count_2);
j = j / 10;
for (; j != 0; j /= 10) {
st2.push(num2 / j % 10);
}
// ------------------------------- 두개의 피연산자 중 큰 것을 찾음
if (count_1 > count_2) {
count = count_1;
}
else if (count_1 < count_2) {
count = count_2;
}
else {
count = count_1;
}
// ------------------------------- 조건에따른 연산 후 st3 대입
j = 0;
for (int i = 1; i <= count; i++) {
if (st1.top() + st2.top() < 9 && j == 0) {
st3.push(st1.top() + st2.top());
j = 0;
}
else if (st1.top() + st2.top() < 9 && j == 1) {
st3.push(st1.top() + st2.top() + j);
j = 0;
}
else if (st1.top() + st2.top() >= 10 && j == 0) {
st3.push(st1.top() + st2.top() - 10);
j = 1;
}
else if (st1.top() + st2.top() >= 10 && j == 1) {
st3.push(st1.top() + st2.top() - 10 + j);
j = 1;
}
else if (st1.top() + st2.top() == 9 && j == 0) {
st3.push(st1.top() + st2.top());
j = 0;
}
else if (st1.top() + st2.top() == 9 && j == 1) {
st3.push(0);
j = 1;
}
else {
cout << "Fail ㅠㅠ" << endl;
}
num1 = st1.top();
num2 = st2.top();
st1.pop();
st2.pop();
}
// ------------------------------- 마지막연산 후 값이 10 이상일 경우 추가
if (num1 + num2 >= 10) {
st3.push(1);
count += 1;
}
// ------------------------------- 결과출력
for (int i = 0; i < count; i++) {
cout << st3.top();
st3.pop();
}
return 0;
}
댓글남기기