问题标题: 酷町堂:6567 求助!Help!

0
0
已解决
汪宇航
汪宇航
新手启示者
新手启示者

题目描述 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追加了内容

回答出来有大奖!


0
已采纳
张恩泽
张恩泽
高级天翼
高级天翼

这题就是把n进制的数转为m进制

首先你要写一个字符串s,用来存所有进制的各位

这样写:

string s = "0123456789ABCDEF";

然后写一个递归函数,把这个数转成m进制:

void 函数名(int n, int m) {
    如果 (n < m) {
        输出字符串s[n];
        结束当前函数
    }
    函数名(n / m, m);
    输出字符串s[n % m];
}

最后写一下主函数就可以了

0
汪宇航
汪宇航
新手启示者
新手启示者

@张恩泽 ,怎么优化?(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;
}

0
汪宇航
汪宇航
新手启示者
新手启示者

@

@@

@@@

@@@@

@@@@@

@@@@@@

@@@@@@

@@@@@

@@@@

@@@

@@

@

 

0
汪宇航
汪宇航
新手启示者
新手启示者

 

 

@

@@

@@@

@@@@

@@@@@

@@@@@@

@@@@@@@

@@@@@@@@

@@@@@@@@@

@@@@@@@@@@

@@@@@@@@@@@

@@@@@@@@@@@@

@@@@@@@@@@@@@

@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@

 

 

我要回答