d016. 後序運算法
| From: [125.227.129.106] |
發表日期
:
2011-04-24 15:18
請問 line 5 為什麼一直都不會過呢?
程式碼如下:
#include<stdio.h>
char s[999]; //設為全域
struct stack{
long a[999];
long sp;
void push(int x){
a[++sp] = x;
}
long pop(){
if(sp >= 0){
return a[sp--];
}else{
return 0;
}
}
};
void chop(char *s){
long i = 0;
while(s[i++] != '\n');
s[--i] = 0;
}
int main(){
struct stack gg; gg.sp = -1;
s[0] = 0;
long ele = 0; long i = 0; long ele1 = 0; long ele2 = 0;
while(fgets(s, sizeof(s), stdin)){
if(feof(stdin))break; chop(s);
yy:
while(!(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '%' || s[i] == 0)){
ele = 0;
while(s[i] != ' '){
ele = ele*10 + (s[i++]-'0'); //算出 ele
}
gg.push(ele); //把運算元丟入堆疊
i++;
}
//遇到運算子就把裡面的兩個數字拿起來做運算
if(s[i] != 0){
ele2 = gg.pop();
ele1 = gg.pop();
if(s[i] == '+')
gg.push(ele1 + ele2);
else if(s[i] == '-')
gg.push(ele1 - ele2);
else if(s[i] == '*')
gg.push(ele1 * ele2);
else if(s[i] == '/')
gg.push(ele1 / ele2);
else if(s[i] == '%')
gg.push(ele1 % ele2);
if(s[++i] != 0){
i = i + 1; //下一個必定是空白
goto yy;
}else{
printf("%d\n", gg.pop());
}
}
s[0] = 0; //初始化
i = 0;
ele = 0;
}
return 0;
}