科学计算器
时间:2011-01-28 来源:leo.ch

2 using namespace std;
3
4 double op(double n1,double n2,char sig)
5 {
6 if(sig=='*')
7 n1*=n2;
8 else if(sig=='/')
9 n1/=n2;
10 else if(sig=='+')
11 n1+=n2;
12 else if(sig=='-')
13 n1-=n2;
14 return n1;
15 }
16
17 int main()
18 {
19 double stNum[100],num;
20 int topNum=1,topSig=0;
21 char stSig[100],sig;
22 cin>>stNum[0];
23 while(cin>>sig && sig!='=')
24 {
25 cin>>num;
26 if(sig=='+' || sig=='-')
27 {
28 stNum[topNum++]=num;
29 stSig[topSig++]=sig;
30 }
31 else if(sig=='*' || sig=='/')
32 stNum[topNum-1]=op(stNum[topNum-1],num,sig);
33 }
34 double result=stNum[0];
35 for(int i=0;i<topNum-1;i++)
36 {
37 result=op(result,stNum[i+1],stSig[i]);
38 }
39 cout<<(int)result<<endl;
40 return 0;
41 }
要注意的东西: 1.这里的栈不是严格意义上的栈,按照栈的定义,栈的操作只能是FILO,我的算法当用来配合队列计算结果时,栈的定义失效了:-) 如果一定要按定义来的话0,也可以把stSig[]看成栈,然后符号栈和数字栈各出一个和result进行计算,只是要注意最后result要加上 stNum[0]就是了!懒得改了,呵呵!
2.stNum[]和result要考虑到小数的情况,如:1/5*5 =1 (!=0)输出结果时,按要求输出整数,最后把result强制类型转换成int型。
相关阅读 更多 +