#include<iostream> #include<string> #include<algorithm> using namespace std; long long toDecimal(const string &numStr,int base) { long long res=0; for(int i=0; i<numStr.size(); i++) { char c=numStr[i]; int val; if(c>='0'&&c<='9')val=c-'0'; else if(c>='A'&&c<='F')val=c-'A'+10; else if(c>='a'&&c<='f')val=c-'a'+10; else { cout<<"非法字符!"<<endl; return -1; } if(val>=base) { cout<<"数字超出该进制允许范围!"<<endl; return -1; } res=res*base+val; } return res; } string fromDecimal(long long dec,int base) { if(dec==0)return "0"; string table="0123456789ABCDEF"; string ans; while(dec>0) { ans+=table[dec%base]; dec/=base; } reverse(ans.begin(),ans.end()); return ans; } int main() { int srcBase,destBase; string number; cout<<"=====进制转换工具(支持2,8,10,16进制)=====\n"; cout<<"请输入原进制(2/8/10/16): "; cin>>srcBase; cout<<"请输入目标进制(2/8/10/16): "; cin>>destBase; cout<<"请输入待转换数字:"; cin>>number; int bases[]= {2,8,10,16}; bool srcOk=false,dstOk=false; int len=sizeof(bases)/sizeof(bases[0]); for(int i=0; i<len; i++) { int b=bases[i]; if(b==srcBase)srcOk=true; if(b==destBase)dstOk=true; } if(!srcOk||!dstOk) { cout<<"错误:只支持2、8、10、16进制!"<<endl; return 1; } long long decNum=toDecimal(number,srcBase); if(decNum==-1)return 1; string result=fromDecimal(decNum,destBase); cout<<"\n转换结果:"<<result<<endl; return 0; }
Note.ms
/nuse