ccf 201903 02 (24点)模拟计算器类问题!
作者:
Accepting
,
2020-06-03 16:30:00
,
所有人可见
,
阅读 625
鄙人不才,此中鄙陋甚多,望海涵!!!
24点 注意数字与符号位对齐处理
另外捎带一提,这种模拟计算器的问题认真研究一道,就相当于会了一类!这里虽然这里将这道题的代码复杂化了,但是这套模板通用性强,不只是能算24,任何加减乘除不加括号的计算都能解决!希望好好研究!
#include<iostream>
#include<cstring>
using namespace std;
const int N=10;
int num[N];
int main()
{
string str;
int n;
cin>>n;
while(n--)
{
cin>>str;//读入字符串!
string fuhao;//符号与数字位分别提取出来,方便后面的对齐处理!
int sum=0,t=0,q=0,temp;//q为数字的个数,t为符号的个数!
for(int i=0;i<7;i++)//共有4数字三符号,7个字符!
{
if(str[i]>='0'&&str[i]<='9') num[q++]=str[i]-'0';//数字位!
else fuhao[t++]=str[i];//符号位!
}
sum=num[0];//sum为最后的结果!先让其等于第一位!
for(int i=1;i<q;i++) num[i-1]=num[i];//对齐处理,让数字与符号对齐处理!
for(int i=0;i<t;i++)
{
if(fuhao[i]=='x') sum*=num[i];
else if(fuhao[i]=='/') sum/=num[i];
else
{
int w=i;
temp=num[i];
while((fuhao[i+1]=='x' || fuhao[i+1]=='/') && i+1<t)
{
if(fuhao[i+1]=='x') temp*=num[i+1];
else temp/=num[i+1];
i++;
}
if(fuhao[w]=='+') sum+=temp;
else sum-=temp;
}
}
if(sum==24) puts("Yes");
else puts("No");
}
return 0;
}
持续更新中。。。。