題目描述
給出一個表達式,其中運算符僅包含+,-,*,/,^要求求出表達式的最終值 在這裏," /" 爲整除 最終結果爲正整數,數據保證不需要使用高精度!
輸入
僅一行,即爲表達式
輸出
僅一行,既爲表達式算出的結果 結果小於maxlongint,且整個計算的過程中,也不會超過maxlongint
樣例輸入
2^3+1
樣例輸出
9
提示
表達式總長度< =20
思路:對於每個計算符給一個數值相匹配,在給一個二維數組,對於前面給的值,比較他們的優先級,比如‘-’是1,‘’是2那麼judge[1][2]= 1,表示‘’比‘-’優先級高,先處理優先級高的
#include<bits/stdc++.h>
using namespace std;
int fun(char c)
{
if(c=='+') return 0;
else if(c=='-') return 1;
else if(c=='*') return 2;
else if(c=='/') return 3;
else return 4;
}
int fun1(int a,int b,char c)
{
int num;
if(c=='+') num=a+b;
else if(c=='-') num=a-b;
else if(c=='*') num=a*b;
else if(c=='/') num=a/b;
else{
num=1;
for(int i=1;i<=b;i++)
num *= a;
}
return num;
}
int judge[5][5]={{0,0,-1,-1,-1},{0,0,-1,-1,-1},{1,1,0,0,-1},{1,1,0,0,-1},{1,1,1,1,0}};
int main()
{
char s[20],s1[20];
int m[20]={0};
int ps1=0,pm=0,i,len;
int sum;
cin >> s;
len = strlen(s);
for(i=0;i<len;i++){
if(s[i]>='0'&&s[i]<='9'){
m[pm] += s[i]-'0';
if(s[i+1]>='0' && s[i+1]<='9') m[pm] *= 10;
else pm++;
}
else
{
while(judge[fun(s[i])][fun(s1[ps1-1])]<=0 &&ps1-1>=0)
{
pm--;
m[pm-1]=fun1(m[pm-1],m[pm],s1[ps1-1]);
ps1--;
m[pm]=0;
}
}
if(s[i]<'0' || s[i]>'9') s1[ps1++]=s[i];
if(i==len-1){
for(int t=ps1-1;t>=0;t--)
{
sum = fun1(m[t],m[t+1],s1[t]);
m[t] = sum;
}
}
}
cout << sum << endl;
return 0;
}