题目
我的代码
#include <iostream>
#include<sstream>
#include<cstdlib>
#include<string>
using namespace std;
int main(int argc, char *argv[]) {
int n,index,a,b,c,i,j;
string str,substr;
cin>>n;
while(n--)
{
cin>>str;
str=" "+str+" ";
for(index=-1;str.find("/",index+1)!=str.npos||str.find("x",index+1)!=str.npos;)
{
if((str.find("/",index+1)<str.find("x",index+1)&&str.find("/",index+1)!=-1)||str.find("x",index+1)==-1)
{
index=str.find("/",index+1);
for(i=index-1;i>=0;i--)
if(str[i]<'0'||str[i]>'9')
break;
a=atoi(str.substr(i+1,index-i-1).c_str());
for(j=index+1;str[j]!='\0';j++)
if(str[j]<'0'||str[j]>'9')
break;
b=atoi(str.substr(index+1,j-1-index).c_str());
c=a/b;
}
else if((str.find("/",index+1)>str.find("x",index+1)&&str.find("x",index+1)!=-1)||str.find("/",index+1)==-1)
{
index=str.find("x",index+1);
for(i=index-1;i>=0;i--)
if(str[i]<'0'||str[i]>'9')
break;
a=atoi(str.substr(i+1,index-i-1).c_str());
for(j=index+1;str[j]!='\0';j++)
if(str[j]<'0'||str[j]>'9')
break;
b=atoi(str.substr(index+1,j-1-index).c_str());
c=a*b;
}
stringstream ss;
ss<<c;
ss>>substr;
str=str.substr(0,i+1)+substr+str.substr(j);
index-=index-i-1;
}
while(str.find("+",2)!=str.npos||str.find("-",2)!=str.npos)
{
if((str.find("-",2)<str.find("+",2)&&str.find("-",2)!=str.npos)||str.find("+",2)==str.npos)
{
index=str.find("-",2);
a=atoi((str.substr(1,index-1)).c_str());
for(j=index+1;str[j]!='\0';j++)
if(str[j]<'0'||str[j]>'9')
break;
b=atoi(str.substr(index+1,j-1-index).c_str());
c=a-b;
stringstream ss;
ss<<c;
ss>>substr;
str=str.substr(0,1)+substr+str.substr(j);
}
else if((str.find("+",2)<str.find("-",2)&&str.find("+",2)!=str.npos)||str.find("-",2)==str.npos)
{
index=str.find("+",2);
a=atoi((str.substr(1,index-1)).c_str());
for(j=index+1;str[j]!='\0';j++)
if(str[j]<'0'||str[j]>'9')
break;
b=atoi(str.substr(index+1,j-1-index).c_str());
c=a+b;
stringstream ss;
ss<<c;
ss>>substr;
str=str.substr(0,1)+substr+str.substr(j);
}
}
if(str==" 24 ")
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
我的思路
基本思路就是字符串处理,主要用到字符串find函数和截取substr函数:
- 先算乘除法,例如2x4+1+4/5我会在乘除法循环里面将它变成8+1+0
- 再算加减法,这里特别注意减法操作可能会出现负数,需要做不同处理