題目:用遞歸求解逆波蘭表達式的結果(數字符號之間都用空格隔開)
逆波蘭表達式:
比如說:(2+3)*4 -> * + 2 3 4
比如說 * + 11 12 + 24 35 -> (24+ 35)*(11 + 12) = 1357
前提知識:
atof函數能把char型轉換成浮點數
atof():double atof(const char *str )
思路:
向字符串數組輸入,分兩種情況,1,是符號,2,是數字
(向字符串數組輸入時如果遇到空格會停止)
所以如果時第一種情況char 數組只會有c[0]這個位置
而輸入的浮點數則會占據幾個位置
然后開始遞歸
如果是第一種情況,符號,則引出下一次遞歸
如果是第二種情況,數字,則直接return
難點:不能考慮一次輸完之后再考慮,要便輸入邊計算
#include<bits/stdc++.h> using namespace std; int bolan() { char c[10]; cin>>c; switch(c[0]) { case'+':return bolan()+bolan(); case'-':return bolan()-bolan(); case'*':return bolan()*bolan(); case'/':return bolan()/bolan(); default:return atof(c); break; } } int main() { cout<<bolan()<<endl; }