站外题,求调,悬关
  • 板块灌水区
  • 楼主MAX_CURRY_JAMES
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/23 10:57
  • 上次更新2024/11/23 13:10:23
查看原帖
站外题,求调,悬关
796776
MAX_CURRY_JAMES楼主2024/11/23 10:57

题目描述 琳琳正在研究一个只有加法和乘法的算术式,假设她可以合法的任意加括号,你能帮她能求出这个算术式可能得到的最大值和最小值吗?参与运算的数据项都是正整数,数据项的个数不超过 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;
}

2024/11/23 10:57
加载中...