新手启示者
题目描述 Description
实现不同进制之间的转换
输入描述 Input Description
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)
第二行是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000
第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)
输出描述 Output Description
一个正整数,表示转换之后的mm进制数
样例输入 Sample Input
16 FF 2
样例输出 Sample Output
11111111
汪宇航在2021-05-15 18:48:38追加了内容
回答出来有大奖!
高级天翼
这题就是把n进制的数转为m进制
首先你要写一个字符串s,用来存所有进制的各位
这样写:
string s = "0123456789ABCDEF";
然后写一个递归函数,把这个数转成m进制:
void 函数名(int n, int m) {
如果 (n < m) {
输出字符串s[n];
结束当前函数
}
函数名(n / m, m);
输出字符串s[n % m];
}
最后写一下主函数就可以了
新手启示者
@张恩泽 ,怎么优化?(20)
#include <bits/stdc++.h>
using namespace std;
int n,a[500],y=0,x;
string s="0123456789ABCDEF";
void jz(int n,int m){
if(n<m){
cout<<s[n];
return;
}
jz(n/m,m);
cout<<s[n%m];
}
int main(){
string f;
cin>>n>>f>>x;
int z=f.size()-1;
if(f=="0"){
cout<<0;
return 0;
}
for(int i=0;i<f.size();i++){
if(f[i]>='A'){
a[i]=10+(f[i]-'A');
}else{
a[i]=int(f[i])-48;
}
}
for(int i=0;i<f.size();i++){
jz(a[i],x);
}
return 0;
}