社区讨论
求助,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 条回复,欢迎继续交流。
正在加载回复...