演算法訓練 字首表示式
時間限制:1.0s 記憶體限制:512.0MB
問題描述
編寫一個程式,以字串方式輸入一個字首表示式,然後計算它的值。輸入格式為:“運算子 物件1 物件2”,其中,運算子為“+”(加法)、“-”(減法)、“*”(乘法)或“/”(除法),運算物件為不超過10的整數,它們之間用一個空格隔開。要求:對於加、減、乘、除這四種運算,分別設計相應的函式來實現。
輸入格式:輸入只有一行,即一個字首表示式字串。
輸出格式:輸出相應的計算結果(如果是除法,直接採用c語言的“/”運算子,結果為整數)。
輸入輸出樣例
輸入格式:輸入只有一行,即一個字首表示式字串。
輸出格式:輸出相應的計算結果(如果是除法,直接採用c語言的“/”運算子,結果為整數)。
輸入輸出樣例
樣例輸入
+ 5 2
樣例輸出
7
ps:http://lx.lanqiao.org/problem.page?gpid=T225
誰能告訴我,錯哪了。。。。。。無愛了!
#include<stdio.h> #include<stack> #include<string.h> using namespace std; stack<int> s; void fun(char op) { // printf("%c\n",op); int x,y; if(s.empty()) return ; x=s.top(); s.pop(); // printf("%d\n",x); if(s.empty()) return ; y=s.top(); s.pop(); // printf("x=%d,y=%d\n",x,y); switch(op) { case'+':x+=y; break; case'-':x-=y; break; case'*':x*=y; break; case'/':x/=y; break; } s.push(x); } char ch[10005]; int main() { int len,x,y; gets(ch); // printf("%s\n",ch); len=strlen(ch); // printf("%d\n",len); for(int i=len-1;i>=0;i--) { if(ch[i]==' ') continue; // printf("%c",ch[i]); if(ch[i]>='0'&&ch[i]<='9') { int xx=ch[i]-'0'; s.push(xx); } else if(ch[i]=='+') fun(ch[i]); else if(ch[i]=='-') fun(ch[i]); else if(ch[i]=='*') fun(ch[i]); else if(ch[i]=='/') fun(ch[i]); } if(!s.empty()) printf("%d\n",s.top()); s.pop(); return 0; }
然後網上搜了一下,我更加無語了。。。。。。。。。。
#include<iostream> #include<cstdio> using namespace std; int main() { char c; int n,m; scanf("%c",&c); scanf("%d%d",&n,&m); if(c=='+') printf("%d\n",n+m); if(c=='-') printf("%d\n",n-m); if(c=='*') printf("%d\n",n*m); if(c=='/') printf("%d\n",n/m); return 0; }
這程式碼居然能過。。。。。
大神們快來拯救我。幫我看下程式碼;