#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
char ch[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int n, m; // 记录进制的数
cin >> n; // 原数的进制
string str;
cin >> str;
string ans;
vector<int> st(str.size()); // 存储转化为十进制后的每一位数字
for(int i = 0; i < str.size(); i++){
if('0' <= str[i] && str[i] <= '9')
st[i] = str[i] - '0'; // 从字符转化为数字
else
st[i] = str[i] - 'A' + 10; // 转化为16进制数
}
// 将n进制转化为10进制
ll x = 0;
for(int i = 0; i < st.size(); i++)
x = x * n + st[i]; // 使用 n 而不是 h
// 转化为m进制
cin >> m;
while(x){
ans += ch[x % m]; // 先计算余数对应的字符,加到结果字符串汇总
x /= m;
}
reverse(ans.begin(), ans.end()); // 反转
cout << ans << '\n';
return 0;
}
10进制与8进制与16进制之间的转化
#include <bits/stdc++.h>
using namespace std;
int main(){//用x输出16进制 用o输出8进制
int a=0x110d;//十六进制定义0x
int b=01101;//八进制定义0
printf("%d\n",a);//10进制输出
printf("%d\n",b);//10进制输出
printf("%x\n",a);//16进制输出不带0x
printf("%o\n",a);//8进制输出不带0
int c=110;
printf("%x\n",c);//16进制输出
printf("%o\n",c);//8进制输出
int nn = 10;
// 十进制转换为二进制
string cgd = bitset<8>(nn).to_string();
cout << "Binary: " << cgd <<'\n';
// 十进制转化为任意进制
char ch[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
// 转化为m进制
int x;cin>>x;
int m;cin >> m;
string ans;
while(x){
ans += ch[x % m]; // 先计算余数对应的字符,加到结果字符串汇总
x /= m;
}
reverse(ans.begin(), ans.end()); // 反转
cout << ans << '\n';
//任意进制转化为十进制
char str[]="00001010";
char *f;//不合法的字符串
int n=strtol(str,&f,2);
printf("%d",n);
return 0;
}