求助,80 分
查看原帖
求助,80 分
1360152
wanghonghui123楼主2024/9/26 20:22
#include <bits/stdc++.h>
#define int long long 
using namespace std;
inline int KSM(int base,int power){
    int ans=1;
    while(power){
        if(power&1){
            ans=(ans*base);
        }
        base=base*base;
        power>>=1;
    }
    return ans;
}
stack<int> nums;
stack<char> ops;
inline void cal(){
	char c = ops.top(); ops.pop();
	int b = nums.top(); nums.pop();
	int a = nums.top(); nums.pop();
	int sum = 0;
	switch(c){
		case '+': sum = a+b; break;
		case '-': sum = a-b; break;
		case '*': sum = a*b; break;
		case '/': sum = a/b; break;
		case '^': sum = KSM(a,b); break;
	}
	nums.push(sum);
}
signed main(){
	string s;
	getline(cin,s);
	s = "("+s+")";
	for(int i=0;s[i];i++){
		if(s[i]>='0'&&s[i]<='9'){
			int j = i;
			int sum = 0;
			while(s[j]>='0'&&s[j]<='9'){
				sum = sum*10 + (s[j]-'0');
				j++;
			} 
			i = j - 1;
			nums.push(sum);
		}else if(s[i]=='('){
			ops.push(s[i]);
		}else if(s[i]=='+'||s[i]=='-'){
			while(ops.top()!='('){
				cal();
			}
			ops.push(s[i]);
		}else if(s[i]=='*'||s[i]=='/'){
			while(ops.top()=='^'||ops.top()=='*'||ops.top()=='/'){
				cal();
			}
			ops.push(s[i]);
		}else if(s[i]=='^'){
			while(ops.top()=='^'){
				cal();
			}
			ops.push(s[i]);
		}else if(s[i]==')'){
			while(ops.top()!='('){
				cal();
			}
			ops.pop();
		}
	}
	cout<<nums.top()<<endl;
	return 0;
}
2024/9/26 20:22
加载中...