#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();
while(1){
int mode;
double d1, d2, ans, value;
switch(mode){
case 5: // データ入力
if(!isFull()){
push(value);
}
break;
case 1: // 足し算
d2 = pop();
d1 = pop();
ans = d1 + d2;
push(ans);
break;
case 2: // 引き算
d2 = pop();
d1 = pop();
ans = d1 - d2;
push(ans);
break;
case 3: // 掛け算
d2 = pop();
d1 = pop();
ans = d1 * d2;
push(ans);
break;
case 4: // 割り算
d2 = pop();
d1 = pop();
ans = d1 / d2;
push(ans);
break;
case 9: // 計算結果表示
answer();
return 0;
default:
break;
}
}
answer();
return 0;
}
// データをスタックへpush
void push(double value)
{
if(sp < SIZE){
stack[sp] = value;
sp++;
}
}
// データをスタックからpop
double pop(void)
{
if(sp > 0){
sp--;
return stack[sp];
} else {
return 0;
}
}
// スタックが満杯か判定
int isFull(void)
{
return sp >= SIZE;
}
// スタックが空か判定
int isEmpty(void)
{
return sp <= 0;
}
// 計算結果表示
void answer(void)
{
if(!isEmpty()){
printf("answer:%f\n", stack
[sp
-1]); }
}
// スタックを空にする
void reset(void)
{
sp = 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgMTAKZG91YmxlIHN0YWNrW1NJWkVdOwppbnQgc3A7Cgp2b2lkIHB1c2goZG91YmxlIHZhbHVlKTsKZG91YmxlIHBvcCh2b2lkKTsKaW50IGlzRnVsbCh2b2lkKTsKaW50IGlzRW1wdHkodm9pZCk7CnZvaWQgYW5zd2VyKHZvaWQpOwp2b2lkIHJlc2V0KHZvaWQpOwoKaW50IG1haW4odm9pZCkKewogICAgcmVzZXQoKTsKICAgIHdoaWxlKDEpewogICAgICAgIGludCBtb2RlOwogICAgICAgIGRvdWJsZSBkMSwgZDIsIGFucywgdmFsdWU7CiAgICAgICAgc2NhbmYoIiVkIiwgJm1vZGUpOwoKICAgICAgICBzd2l0Y2gobW9kZSl7CiAgICAgICAgICAgIGNhc2UgNTogLy8g44OH44O844K/5YWl5YqbCiAgICAgICAgICAgICAgICBzY2FuZigiJWxmIiwgJnZhbHVlKTsKICAgICAgICAgICAgICAgIGlmKCFpc0Z1bGwoKSl7CiAgICAgICAgICAgICAgICAgICAgcHVzaCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJkYXRhOiVmXG4iLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxOiAvLyDotrPjgZfnrpcKICAgICAgICAgICAgICAgIGQyID0gcG9wKCk7CiAgICAgICAgICAgICAgICBkMSA9IHBvcCgpOwogICAgICAgICAgICAgICAgYW5zID0gZDEgKyBkMjsKICAgICAgICAgICAgICAgIHB1c2goYW5zKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6IC8vIOW8leOBjeeulwogICAgICAgICAgICAgICAgZDIgPSBwb3AoKTsKICAgICAgICAgICAgICAgIGQxID0gcG9wKCk7CiAgICAgICAgICAgICAgICBhbnMgPSBkMSAtIGQyOwogICAgICAgICAgICAgICAgcHVzaChhbnMpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzogLy8g5o6b44GR566XCiAgICAgICAgICAgICAgICBkMiA9IHBvcCgpOwogICAgICAgICAgICAgICAgZDEgPSBwb3AoKTsKICAgICAgICAgICAgICAgIGFucyA9IGQxICogZDI7CiAgICAgICAgICAgICAgICBwdXNoKGFucyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA0OiAvLyDlibLjgornrpcKICAgICAgICAgICAgICAgIGQyID0gcG9wKCk7CiAgICAgICAgICAgICAgICBkMSA9IHBvcCgpOwogICAgICAgICAgICAgICAgYW5zID0gZDEgLyBkMjsKICAgICAgICAgICAgICAgIHB1c2goYW5zKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDk6IC8vIOioiOeul+e1kOaenOihqOekugogICAgICAgICAgICAgICAgYW5zd2VyKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGFuc3dlcigpOwogICAgcmV0dXJuIDA7Cn0KCi8vIOODh+ODvOOCv+OCkuOCueOCv+ODg+OCr+OBuHB1c2gKdm9pZCBwdXNoKGRvdWJsZSB2YWx1ZSkKewogICAgaWYoc3AgPCBTSVpFKXsKICAgICAgICBzdGFja1tzcF0gPSB2YWx1ZTsKICAgICAgICBzcCsrOwogICAgfQp9CgovLyDjg4fjg7zjgr/jgpLjgrnjgr/jg4Pjgq/jgYvjgolwb3AKZG91YmxlIHBvcCh2b2lkKQp7CiAgICBpZihzcCA+IDApewogICAgICAgIHNwLS07CiAgICAgICAgcmV0dXJuIHN0YWNrW3NwXTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cn0KCi8vIOOCueOCv+ODg+OCr+OBjOa6gOadr+OBi+WIpOWumgppbnQgaXNGdWxsKHZvaWQpCnsKICAgIHJldHVybiBzcCA+PSBTSVpFOwp9CgovLyDjgrnjgr/jg4Pjgq/jgYznqbrjgYvliKTlrpoKaW50IGlzRW1wdHkodm9pZCkKewogICAgcmV0dXJuIHNwIDw9IDA7Cn0KCi8vIOioiOeul+e1kOaenOihqOekugp2b2lkIGFuc3dlcih2b2lkKQp7CiAgICBpZighaXNFbXB0eSgpKXsKICAgICAgICBwcmludGYoImFuc3dlcjolZlxuIiwgc3RhY2tbc3AtMV0pOwogICAgfQp9CgovLyDjgrnjgr/jg4Pjgq/jgpLnqbrjgavjgZnjgosKdm9pZCByZXNldCh2b2lkKQp7CiAgICBzcCA9IDA7Cn0K