题目描述 琳琳正在研究一个只有加法和乘法的算术式,假设她可以合法的任意加括号,你能帮她能求出这个算术式可能得到的最大值和最小值吗?参与运算的数据项都是正整数,数据项的个数不超过 10且每个数据项的大小为 1 到 10 。 输入 输入数据只有一行,是一个合法的算术式。
输出 输出数据有两行,第一行为能得到的最大值,第二行为能得到的最小值。
样例输入 复制
2+3*5+4=
样例输出 复制
45
21
提示
(2+3)*(5+4)=45
2+3*5+4=21
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
int a[100],b[100],c1,c2,cnt,sum=1,f=1,c[1000],k;
signed main(){
cin>>s;
for(int i=0;i<s.size()-1;i++){
if(s[i]>='0'&&s[i]<='9')
{
a[++c1]=s[i]-'0';
if(s[i+1]=='0') a[c1]*=10,i++;
}
else
{
if(s[i]=='+') b[++c2]=1;
else if(s[i]=='*') b[++c2]=2;
}
}
for(int i=1;i<=c1;i++)
{
cnt+=a[i];
if(b[i]==2) c[++k]=cnt,cnt=0;
}
if(cnt!=0) c[++k]=cnt;
for(int i=1;i<=k;i++)
sum*=c[i];
cout<<sum<<endl;
sum=0;
k=0;
memset(c,0,sizeof(c));
cnt=1;
for(int i=1;i<=c1;i++){
cnt*=a[i];
if(b[i]==1) c[++k]=cnt,cnt=1;
}
c[++k] = cnt;
for(int i=1;i<=k;i++)
sum+=c[i];
cout<<sum;
}