admin管理员组

文章数量:1794759

进制转换总结+蓝桥历届试题小计算器

进制转换总结+蓝桥历届试题小计算器

进制转换总结

10进制数转换成K进制数:

string changetentok(long long num,int k){ while(num!=0){ int temp=num%k; num=num/k; if(temp<=9&&temp>=0) s.push_back(temp+'0'); else s.push_back(temp-10+'A'); } reverse(s.begin(),s.end()); return s; }

k进制数转换成10进制数:

int changektoten(string str,int k){ long long ans=0; for(int i=0;i<str.length();i++){ if(str[i]>='0'&&str[i]<='9')ans=ans*k+(str[i]-'0'); else ans=ans*k+(str[i]-'A'+10); } return ans; }
蓝桥历届试题 小计算器 (进制转换+模拟)**

题目:

题解:

#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; long long change_num_k(string str,int k){ long long ans=0; for(int i=0;i<str.length();i++){ if(str[i]>='0'&&str[i]<='9') ans=ans*k+(str[i]-'0'); else ans=ans*k+(str[i]-'A'+10); } return ans; } string getans(long long num,int k){ if(num==0)return "0"; string ans; while(num){ int temp=num%k; if(temp>9) { ans.push_back(temp-10+'A'); } else { ans.push_back(temp+'0'); } num/=k; } reverse(ans.begin(),ans.end()); return ans; } long long calculator(long long a,long long b,int t){ if(t==1)return a+b; if(t==2)return a-b; if(t==3)return a*b; if(t==4)return a/b; if(t==5)return a%b; } int main(){ int n,k=10; string str,op; int t=0; int flag=0; long long num=0; scanf("%d",&n); while(n--){ cin>>op; //scanf("%s",&op); if(op=="NUM"){ //scanf("%d",&str); cin>>str; if(flag){ num=calculator(num,change_num_k(str,k),t); } else{ num=change_num_k(str,k); flag=1; } } else if(op=="CHANGE"){ scanf("%d",&k); } else if(op=="CLEAR"){ flag=0; } else if(op=="ADD"){ t=1; } else if(op=="SUB"){ t=2; } else if(op=="MUL"){ t=3; } else if(op=="DIV"){ t=4; } else if(op=="MOD"){ t=5; } else if(op=="EQUAL"){ cout<<getans(num,k)<<endl; } } return 0; }

本文标签: 历届计算器试题