四则运算计算器
一个代码非常简陋的四则运算计算器。。
主要利用栈将中缀表达式转为后缀表达式,然后根据运算法则计算即可。因为数可能大于10,便利用了结构体存储不同数据类型。如有错误请指正。
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 const int INF=2333333; 5 struct node 6 { 7 long long num; 8 char op; 9 }a[1100000]; 10 char s[1100000],c[1100000]; 11 long long ans[1100000]; 12 int main(void) 13 { 14 int b=0; 15 for(int i=1;i<=100000;i++)a[i].num=INF; 16 cin>>s; 17 int l=strlen(s),h=0,r=0; 18 long long x=INF; 19 for(int i=0;i<l;i++) 20 { 21 if(s[i]=='+'||s[i]=='-') 22 { 23 if(x!=INF) 24 { 25 a[++h].num=x; 26 x=INF; 27 } 28 if(s[i]=='-'&&r&&c[r]!='(')b=1; 29 while(r&&c[r]!='(')a[++h].op=c[r--]; 30 c[++r]=s[i]; 31 } 32 else if(s[i]=='*'||s[i]=='/') 33 { 34 if(x!=INF) 35 { 36 a[++h].num=x; 37 x=INF; 38 } 39 while(r&&c[r]!='('&&c[r]!='+'&&c[r]!='-')a[++h].op=c[r--]; 40 c[++r]=s[i]; 41 } 42 else if(s[i]=='(') 43 { 44 c[++r]=s[i]; 45 } 46 else if(s[i]==')') 47 { 48 if(c[r]=='-'&&!b) 49 { 50 b=0; 51 a[++h].num=-x; 52 x=INF; 53 r-=2; 54 } 55 else 56 { 57 if(x!=INF) 58 { 59 a[++h].num=x; 60 x=INF; 61 } 62 while(c[r]!='(')a[++h].op=c[r--]; 63 r--; 64 } 65 } 66 else 67 { 68 if(x==INF)x=s[i]-'0'; 69 else x=10*x+s[i]-'0'; 70 } 71 } 72 if(x!=INF)a[++h].num=x; 73 while(r)a[++h].op=c[r--]; 74 int k=0; 75 for(int i=1;i<=h;i++) 76 { 77 if(a[i].num!=INF)ans[++k]=a[i].num; 78 else 79 { 80 if(a[i].op=='+') 81 { 82 ans[k-1]=ans[k-1]+ans[k]; 83 k--; 84 } 85 else if(a[i].op=='-') 86 { 87 ans[k-1]=ans[k-1]-ans[k]; 88 k--; 89 } 90 else if(a[i].op=='*') 91 { 92 ans[k-1]=ans[k-1]*ans[k]; 93 k--; 94 } 95 else if(a[i].op=='/') 96 { 97 ans[k-1]=ans[k-1]/ans[k]; 98 k--; 99 } 100 } 101 } 102 cout<<ans[1]<<endl; 103 return 0; 104 }
终究独木难支。