社区讨论

求助,80 分

P10473表达式计算4参与者 9已保存回复 14

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
13 条
当前快照
1 份
快照标识符
@m1j9la4z
此快照首次捕获于
2024/09/26 20:22
去年
此快照最后确认于
2024/09/26 22:01
去年
查看原帖
CPP
#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;
}

回复

14 条回复,欢迎继续交流。

正在加载回复...