#include <bits/stdc++.h>
using namespace std;
int cnt(vector<int>nums){
int ans=0;
for (int i = 0; i <nums.size() ; ++i) {
ans+=nums[i];
}
return ans;
}
//偶数下降,奇数上升
int main(){
int num=0,zf=1;
vector<int>a,b;
char x;
string str,str1,str2;
cin>>str;
auto pos=str.find('=');
str1=str.substr(0,pos);
str2=str.substr(pos+1);
//处理等号左边的式子
for (int i = 0; i <str1.length() ; ++i) {
//cout<<str1[i];
if (str1[i]>='0'&&str1[i]<='9'){
num*=10;
num+=str1[i]-'0';
}else if (str1[i]=='-'){
b.push_back(zf*num);
num=0;
zf=-1;
if (str1[i+1]>='a'&&str1[i]<='z'){
x=str[i+1];
a.push_back(-1);
zf=1,num=0;
}
}
else if (str1[i]>='a'&&str1[i]<='z'){
x=str1[i];
if (num!=0)
a.push_back(zf*num);
else
a.push_back(1);
zf=1,num=0;
} else
b.push_back(zf*num),zf=1,num=0;
}
if (num!=0)
b.push_back(zf*num);
//处理等号右边的式子
num=0,zf=1;
for (int i = 0; i <str2.length() ; ++i) {
if (str2[i]>='0'&&str2[i]<='9'){
num*=10;
num+=str2[i]-'0';
}else if (str2[i]=='-'){
b.push_back(-1*zf*num);
zf=-1;
if (str2[i+1]>='a'&&str2[i]<='z'){
x=str2[i+1];
a.push_back(1);
zf=1,num=0;
}
num=0;
}
else if (str2[i]>='a'&&str2[i]<='z'){
x=str2[i];
if (num!=0)
a.push_back(-1*zf*num);
zf=1,num=0;
} else
b.push_back(-1*zf*num),zf=1,num=0;
}
b.push_back(-1*zf*num);
double ans=(double)(cnt(b))*-1.0/(double)(cnt(a));
if (ans==-0)
ans=0;
printf("%c=%.3lf",x,ans);
return 0;
}```
P1022 计算器的改良
最新推荐文章于 2024-02-15 18:55:46 发布