#include #include#include
#include
#include
using
namespace
std;
const
int max=1505
;char data[max]; //
存放輸入的表示式
double num[max]; //
存表示式中的數字
char sign[max]; //
存表示式中的符號
int ntop,stop,w; //
ntop標記數字棧頂元素的位置,stop標記符號棧頂元素的位置
double sum; //
結果int
kk;//
選單類class
menu;//
選單的建構函式的具體實現
void
menu::getmenu()
//基本+-*/計算類
class
dshn
void count(char * signs); //
實現基本+-*/運算的函式
};//
基本的+-*/運算函式的具體實現
void dshn::count(char *signs)
else
if(sign[stop]=='-'
)
else
if(sign[stop]=='*'
)
else
if(sign[stop]=='/'
)
else
}else
if(sign[stop]!='
\0'&&sign[stop]!='
('&&sign[stop]!='
)') //
存在錯誤符號
stop--; //
拋掉符號棧頂元素,以便下乙個新符號存入棧頂
}int
main()
else
else
//整數
ans=ans*10+data[i]-'0'
; markn=1; //
標記得到乙個數字
} }
else
else
//若沒有數字,則第乙個為符號或者出現連續符號
if(data[i]=='
-') //
如果出現負符號,則w記錄為-1
else
if(data[i]=='
+') //
如果出現正符號,則w不需要變化,無影響
continue
; }
}if(i==len)
//表示式已計算完跳出for迴圈
if(w==-1
) num[ntop]=-num[ntop];
if(data[i]=='
-'||data[i]=='
+') //
表示式當前元素為'+'或'-'
sign[++stop]=data[i]; //
將新符號壓入棧頂
}
else
if(data[i]=='
*'||data[i]=='/'
)
sign[++stop]=data[i]; //
將新符號壓入棧頂
}
else
if(data[i]==')'
)
stop--; //
括號內的值已存到數字棧,刪掉'('
}
else
sign[++stop]=data[i];
w=1; //
運算結束後重新標記為1
m=0; //
出現數字後重新清0
} }
if(kk==1
)
while
(stop)
ob.count(sign);
if(kk==1
) cout
<<"
error
"
printf(
"%.4lf\n
",num[1
]); }
}
簡單計算器 中綴表示式轉字尾表示式 求值
命題人 外部匯入 時間限制 1.000 sec 記憶體限制 32 mb 解決 1817 提交 4382統計 題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一...
表示式計算器
早在上大學的時候,就想編寫乙個可以計算數學表示式的計算器,因為windowsxp自帶的計算器不支援表示式輸入,當要計算乙個算式時,不太方便。表示式計算器看似簡單,但要想把它做完善,不太容易,經過幾次改進之後,於一年前完成了這個小程式,雖然可能會有一些不足,不過也不打算再投入時間了,價值不大,只是拿來...
HDU 1237 簡單計算器 表示式求值
讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。output 對每個測試用例輸出1行,即該表示式的值,精確到小數點後...