表示式求值 (計算器)

2022-09-04 07:57:11 字數 2367 閱讀 3822

#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行,即該表示式的值,精確到小數點後...