解题思路:
注意事项:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
string order;
string Left,Right,oper;
string Hex="10";
//任意进制转换为十进制
LL hexToTen(string num)
{
LL HEX=atoll(Hex.c_str());
LL res=0,tmp=1;
for (int i=num.size()-1;i>=0;i--){
int base;
if (num[i]>='A'&&num[i]<='Z'){
base=num[i]-'A'+10;
}
else{
base=num[i]-'0';
}
res+=tmp*base;
tmp*=HEX;
}
return res;
}
LL getResult()
{
LL a=atoll(Left.c_str());
LL b=atoll(Right.c_str());
LL c=0;
if (oper=="ADD"){
c=a+b;
}
if (oper=="SUB"){
c=a-b;
}
if (oper=="MUL"){
c=a*b;
}
if (oper=="DIV"){
c=a/b;
}
if (oper=="MOD"){
c=a%b;
}
return c;
}
//将结果转化为当前进制 ,并输出
void hexToNow(LL result)
{
if (result==0){
puts("0");
return;
}
vector <char> v;
LL HEX=atoll(Hex.c_str());
LL t;
while (result!=0){
t=result%HEX;
if (t>=10){
v.push_back((char)('A'+t-10));
}
else{
v.push_back((char)(t+'0'));
}
result/=HEX;
}
for (int i=v.size()-1;i>=0;i--){
cout << v[i];
}
cout << endl;
}
void solveOper(string order,string num)
{
char tmp[105];
if (order=="NUM"){
if (oper==""){
sprintf(tmp,"%lld",hexToTen(num));
Left=string(tmp);
}
else{
sprintf(tmp,"%lld",hexToTen(num));
Right=string(tmp);
sprintf(tmp,"%lld",getResult());
Left=string(tmp); oper=Right="";
}
}
else if (order=="CHANGE"){
Hex=num;
}
else if (order=="EQUAL"){
hexToNow(atoll(Left.c_str()));
}
else if (order=="CLEAR"){
Left=oper=Right="";
}
else{
oper=order;
}
}
int main()
{
cin >> n;
getchar();
while (n--){
getline(cin,order);
int index=order.find(' ');
if (index < 0){
solveOper(order,"");
}
else{
solveOper(order.substr(0,index),order.substr(index+1));
}
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复