#include <iostream> #include <string> #include <algorithm> using namespace std; //检测字符串a的每一位数字是否都小于进制数n bool cmp(string a,int n){ int la=a.size(); for(int i=la-1;i>=0;i--){ if(a[i]>='0'&&a[i]<='9'&&(a[i]-'0')>n) return false; if(a[i]>='A'&&a[i]<='F'&&(a[i]-'A'+10)>n) return false; if(a[i]>='a'&&a[i]<='f'&&(a[i]-'a'+10)>n) return false; } return true; } //n进制的字符串a 转10进制整数 int SNto10(string a,int n){ int b=0; int la=a.size(); int q=1; for(int i=la-1;i>=0;i--){ if(a[i]>='0'&&a[i]<='9') b+=(a[i]-'0')*q; else if(a[i]>='A'&&a[i]<='F') b+=(a[i]-'A'+10)*q; else if(a[i]>='a'&&a[i]<='f') b+=(a[i]-'a'+10)*q; q*=n; } return b; } //10进制数字a 转换为n进制的字符串 string S10toN(int a,int n){ string b=""; while(a>0){ if(a%n>9) b+=(char)(a%n-10+'A'); else b+=(char)(a%n+'0'); a/=n; } reverse(b.begin(),b.end()); return b; } int main() { //测试:字符串"1101AB"转16进制 string a="1101AB"; int n=16; if(cmp(a,n)){//判断是否每位数字有小于n cout<<SNto10(a,n)<<endl; }else{ cout<<"输入有误!"<<endl; } //测试:10进制整数1114539转16、8、2进制 cout<<S10toN(1114539,16)<<endl; cout<<S10toN(1114539,8)<<endl; cout<<S10toN(1114539,2)<<endl; return 0; }