-
무한 자릿수 계산기 C++Study/Etc 2018. 5. 11. 01:21
무한 자릿수 계산기
(가정)
1. 수식은 잘못 입력되지 않는다. ex) 2/0, 1*/2 ... 이런건 없다.
2. 나누기는 int 범위로 계산한다. +, -, * 만 무한 자릿수 계산 가능하다.
(구현)
1. 중위 표기법(일반적인 수식)을 후위 표기법으로 변환
ex) 1+(2*3)/2 >> 변환 후 >> 123*2/+
└>여기서부터 시작
1) 숫자를 만나면 문자열에 추가
2) 부호를 만나면 stack에 push
2-1) stack이 비어있거나 stack의 top이 우선 순위가 낮으면 push
2-2) stack의 top이 우선 순위가 높거나 같으면,
stack이 비워지거나, ' ( '를 만나거나, 우선 순위가 낮은 부호를 만날 때까지 pop,
pop한 부호는 문자열에 추가,
그리고 해당 부호를 push
3) ' ( '를 만나면 stack에 push
4) ' ) '를 만나면 ' ( '를 만날 때까지 pop하고 문자열에 추가
4-1) 괄호는 문자열에 추가하지 않는다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// stack에 부호를 push&pop, 문자열에 부호 추가void pushOp(stack<string>& stOp, string op, string& post){if(op.compare("*") == 0 || op.compare("/") == 0){while (!stOp.empty()){if (stOp.top().compare("+") == 0|| stOp.top().compare("-") == 0|| stOp.top().compare("(") == 0)break;post += ' ';post += stOp.top();stOp.pop();}stOp.push(op);}else if (op.compare("+") == 0 || op.compare("-") == 0){while (!stOp.empty()){if (stOp.top().compare("(") == 0)break;post += ' ';post += stOp.top();stOp.pop();}stOp.push(op);}else if(op.compare("(") == 0){stOp.push(op);}else if (op.compare(")") == 0){while (stOp.top().compare("(") != 0){post += ' ';post += stOp.top();stOp.pop();}stOp.pop(); // "(" pop}else{while (!stOp.empty()){post += ' ';post += stOp.top();stOp.pop();}}}cs 2. 후위 표기법으로 변환한 수식을 계산
ex) 123*2/+
└> 여기서부터 시작
1) 숫자를 만나면 stack에 push
2) 부호를 만나면 stack에서 2개 pop해서 계산하고 그 값은 push
3) 1~2 반복
4) 가장 마지막에 push한 숫자, stack에 하나 남은 그 숫자. 그게 바로 답이다.
3. 무한 자릿수 계산
나중에 써야지...
- 아래는 전체 코드, 오류가 있을지도...?
'Study > Etc' 카테고리의 다른 글
c# string @ (0) 2020.03.03 댓글