一道模拟题,各种问题都来了。没有问题后,提交后发现超时。。。
网上参考的一段代码,思路很清晰!!!
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll R_to_Ten(string s,int jinzhi) ///R进制转十进制
{
ll cnt=1;
reverse(s.begin(),s.end());
ll ans=0;
for(int i=0;i<s.size();i++)
{
if(s[i]<='9'&&s[i]>='0')
{
ans+=(s[i]-'0')*cnt;
}
else ans+=(s[i]-'A'+10)*cnt;
cnt=cnt*jinzhi;
}
return ans;
}
string Ten_to_R(ll num,int jinzhi) ///十进制转R进制
{
string s;
if(num==0)
{
return "0";
}
while(num)
{
int x=num%jinzhi;
if(x<=9&&x>=0)
{
s+=(char)(x+'0');
}
else s+=(char)(x+'A'-10);
num/=jinzhi;
}
reverse(s.begin(),s.end());
return s;
}
ll calculate(ll a,ll b, string s) ///计算
{
if(s=="ADD")
{
return a+b;
}
else if(s=="SUB")
{
return a-b;
}
else if(s=="MUL")
{
return a*b;
}
else if(s=="DIV")
{
return a/b;
}
else if(s=="MOD")
{
return a%b;
}
}
int main()
{
ios::sync_with_stdio(false);
int r=10;
int n;
ll ans=0;///始终是10进制的
string str;
string tmp; ///五个运算操作
cin>>n;
while(n--)
{
cin>>str;
if(str=="CLEAR")///清空
{
str="*";
tmp="*";
}
else if(str=="EQUAL") ///转成R进制打印
{
tmp="*";
cout<<Ten_to_R(ans,r)<<endl;
}
else if(str=="CHANGE")///输入R进制
{
cin>>r;
}
else if(str=="NUM"&&tmp=="*")///被操作的数
{
cin>>str;
ans=R_to_Ten(str,r);///保证ans 是10进制的
}
else if(str=="NUM"&&tmp!="*")///操作数不为空
{
cin>>str;
ans=calculate(ans,R_to_Ten(str,r),tmp);
}
else tmp=str;///要做的操作
}
return 0;
}