#include <stdio.h>
#define SIZE 10
double stack[SIZE];
int sp;
void push(double value);
double pop(void);
int isFull(void);
int isEmpty(void);
void answer(void);
void reset(void);
int main(void)
{
reset();
int resp;
double num1, num2, value;
while (1)
{
if (scanf("%d", &resp
) != 1) { return 1; // エラー発生時に終了
}
if (resp == 9) break;
switch (resp)
{
case 5: // データ入力
if (scanf("%lf", &value
) != 1) { break;
}
push(value);
break;
case 1: // 足し算
if (isEmpty()) {
break;
}
num1 = pop();
if (isEmpty()) {
push(num1); // 元の値を戻す
break;
}
num2 = pop();
push(num1 + num2);
break;
case 2: // 引き算
if (isEmpty()) {
break;
}
num1 = pop();
if (isEmpty()) {
push(num1); // 元の値を戻す
break;
}
num2 = pop();
push(num2 - num1);
break;
case 3: // 掛け算
if (isEmpty()) {
break;
}
num1 = pop();
if (isEmpty()) {
push(num1); // 元の値を戻す
break;
}
num2 = pop();
push(num2 * num1);
break;
case 4: // 割り算
if (isEmpty()) {
break;
}
num1 = pop();
if (isEmpty()) {
push(num1); // 元の値を戻す
break;
}
num2 = pop();
if (num1 == 0) {
printf("Division by zero error.\n"); push(num2); // 元の値を戻す
push(num1); // 元の値を戻す
break;
}
push(num2 / num1);
break;
default:
break;
}
}
answer();
return 0;
}
void push(double value)
{
if (isFull()) {
} else {
stack[sp++] = value;
}
}
double pop(void)
{
if (isEmpty()) {
return 0; // エラー値(エラー処理として0を返す)
} else {
return stack[--sp];
}
}
int isFull(void)
{
return sp == SIZE;
}
int isEmpty(void)
{
return sp == 0;
}
void answer(void)
{
if (isEmpty()) {
} else {
printf("Answer: %f\n", stack
[sp
- 1]); }
}
void reset(void)
{
sp = 0; // スタックポインタをリセットして空にする
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgMTAKZG91YmxlIHN0YWNrW1NJWkVdOwppbnQgc3A7Cgp2b2lkIHB1c2goZG91YmxlIHZhbHVlKTsKZG91YmxlIHBvcCh2b2lkKTsKaW50IGlzRnVsbCh2b2lkKTsKaW50IGlzRW1wdHkodm9pZCk7CnZvaWQgYW5zd2VyKHZvaWQpOwp2b2lkIHJlc2V0KHZvaWQpOwoKaW50IG1haW4odm9pZCkKewogICAgcmVzZXQoKTsKICAgIGludCByZXNwOwogICAgZG91YmxlIG51bTEsIG51bTIsIHZhbHVlOwoKICAgIHdoaWxlICgxKQogICAgewogICAgICAgIGlmIChzY2FuZigiJWQiLCAmcmVzcCkgIT0gMSkgewogICAgICAgICAgICBwcmludGYoIkludmFsaWQgaW5wdXQuXG4iKTsKICAgICAgICAgICAgcmV0dXJuIDE7IC8vIOOCqOODqeODvOeZuueUn+aZguOBq+e1guS6hgogICAgICAgIH0KICAgICAgICBpZiAocmVzcCA9PSA5KSBicmVhazsKCiAgICAgICAgc3dpdGNoIChyZXNwKQogICAgICAgIHsKICAgICAgICAgICAgY2FzZSA1OiAvLyDjg4fjg7zjgr/lhaXlipsKICAgICAgICAgICAgICAgIGlmIChzY2FuZigiJWxmIiwgJnZhbHVlKSAhPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGlucHV0LlxuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoKHZhbHVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAxOiAvLyDotrPjgZfnrpcKICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBwcmludGYoIlN0YWNrIGlzIGVtcHR5LlxuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBudW0xID0gcG9wKCk7CiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTdGFjayBpcyBlbXB0eS5cbiIpOwogICAgICAgICAgICAgICAgICAgIHB1c2gobnVtMSk7IC8vIOWFg+OBruWApOOCkuaIu+OBmQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbnVtMiA9IHBvcCgpOwogICAgICAgICAgICAgICAgcHVzaChudW0xICsgbnVtMik7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgMjogLy8g5byV44GN566XCiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTdGFjayBpcyBlbXB0eS5cbiIpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbnVtMSA9IHBvcCgpOwogICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiU3RhY2sgaXMgZW1wdHkuXG4iKTsKICAgICAgICAgICAgICAgICAgICBwdXNoKG51bTEpOyAvLyDlhYPjga7lgKTjgpLmiLvjgZkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG51bTIgPSBwb3AoKTsKICAgICAgICAgICAgICAgIHB1c2gobnVtMiAtIG51bTEpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIDM6IC8vIOaOm+OBkeeulwogICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiU3RhY2sgaXMgZW1wdHkuXG4iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG51bTEgPSBwb3AoKTsKICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBwcmludGYoIlN0YWNrIGlzIGVtcHR5LlxuIik7CiAgICAgICAgICAgICAgICAgICAgcHVzaChudW0xKTsgLy8g5YWD44Gu5YCk44KS5oi744GZCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBudW0yID0gcG9wKCk7CiAgICAgICAgICAgICAgICBwdXNoKG51bTIgKiBudW0xKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSA0OiAvLyDlibLjgornrpcKICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICBwcmludGYoIlN0YWNrIGlzIGVtcHR5LlxuIik7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBudW0xID0gcG9wKCk7CiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTdGFjayBpcyBlbXB0eS5cbiIpOwogICAgICAgICAgICAgICAgICAgIHB1c2gobnVtMSk7IC8vIOWFg+OBruWApOOCkuaIu+OBmQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbnVtMiA9IHBvcCgpOwogICAgICAgICAgICAgICAgaWYgKG51bTEgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIHByaW50ZigiRGl2aXNpb24gYnkgemVybyBlcnJvci5cbiIpOwogICAgICAgICAgICAgICAgICAgIHB1c2gobnVtMik7IC8vIOWFg+OBruWApOOCkuaIu+OBmQogICAgICAgICAgICAgICAgICAgIHB1c2gobnVtMSk7IC8vIOWFg+OBruWApOOCkuaIu+OBmQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaChudW0yIC8gbnVtMSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBwcmludGYoIkludmFsaWQgY2hvaWNlLlxuIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgYW5zd2VyKCk7CgogICAgcmV0dXJuIDA7Cn0KCnZvaWQgcHVzaChkb3VibGUgdmFsdWUpCnsKICAgIGlmIChpc0Z1bGwoKSkgewogICAgICAgIHByaW50ZigiU3RhY2sgaXMgZnVsbC5cbiIpOwogICAgfSBlbHNlIHsKICAgICAgICBzdGFja1tzcCsrXSA9IHZhbHVlOwogICAgfQp9Cgpkb3VibGUgcG9wKHZvaWQpCnsKICAgIGlmIChpc0VtcHR5KCkpIHsKICAgICAgICBwcmludGYoIlN0YWNrIGlzIGVtcHR5LlxuIik7CiAgICAgICAgcmV0dXJuIDA7IC8vIOOCqOODqeODvOWApO+8iOOCqOODqeODvOWHpueQhuOBqOOBl+OBpjDjgpLov5TjgZnvvIkKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHN0YWNrWy0tc3BdOwogICAgfQp9CgppbnQgaXNGdWxsKHZvaWQpCnsKICAgIHJldHVybiBzcCA9PSBTSVpFOwp9CgppbnQgaXNFbXB0eSh2b2lkKQp7CiAgICByZXR1cm4gc3AgPT0gMDsKfQoKdm9pZCBhbnN3ZXIodm9pZCkKewogICAgaWYgKGlzRW1wdHkoKSkgewogICAgICAgIHByaW50ZigiU3RhY2sgaXMgZW1wdHkuXG4iKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcHJpbnRmKCJBbnN3ZXI6ICVmXG4iLCBzdGFja1tzcCAtIDFdKTsKICAgIH0KfQoKdm9pZCByZXNldCh2b2lkKQp7CiAgICBzcCA9IDA7IC8vIOOCueOCv+ODg+OCr+ODneOCpOODs+OCv+OCkuODquOCu+ODg+ODiOOBl+OBpuepuuOBq+OBmeOCiwp9Cg==