Wa once, because the use of long is not considered completely. This question is similar to the brackets in the past. Maximum calculates the addition, saves the sum, and multiply the result. The minimum calculates the multiplication and adds the result.
#include<cstdio>#include<cstring>#include<iostream>#include<cctype>using namespace std;int main(){ //freopen("in.txt","r",stdin); char str[350]; long long int add[20],fac[20]; int numadd,numfac,n,flag; scanf("%d",&n); getchar(); while(n--) { gets(str); flag=0; numadd=0; numfac=0; long long int num=0,sum=0,cc=1; int i; for( i=0; str[i]!='\0'; i++) { if(isdigit(str[i])) num=num*10+str[i]-'0'; else if(str[i]=='+') { flag=1; sum+=num; cc*=num; add[numadd++]=cc; cc=1; num=0; } else if(str[i]=='*') { flag=1; sum+=num; fac[numfac++]=sum; sum=0; cc*=num; num=0; } } if(flag==0) { cout<<"The maximum and minimum are "<<num<<" and "<<num<<".\n"; continue; } for(i--; isdigit(str[i])&&i>=0; i--); if(str[i]=='+') { sum+=num; fac[numfac++]=sum; cc*=num; add[numadd++]=cc; cc=1; num=0; } else if(str[i]=='*') { sum+=num; fac[numfac++]=sum; sum=0; cc*=num; add[numadd++]=cc; num=0; } long long FAC=1; long long int ADD=0; for(i=0; i<numadd; i++) ADD+=add[i]; for( i=0; i<numfac; i++) FAC*=fac[i]; cout<<"The maximum and minimum are "<<FAC<<" and "<<ADD<<".\n"; } return 0;}