/*
제    목 : 데이터구조 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;
}

태그:

Cpp

카테고리:

업데이트:

댓글남기기