网易互娱的笔试第二题(字母进制转换__模拟题)

编码规则:

对于正整数5555,按照第一步,会划分成两组:

005,555

按照第2步,每组转成二进制,结果如下:

101,1000101011

按照第3步,会划分为3组:

00101,10001,01011

按第4步,算出每一组的值:

5,17,11

数值5以字符5表示,数值17以字母表第8个大写字母H表示,数值11以字母第2个大写字母B表示,则转换成以下字符:

5,H,B

按第5步,从高位到低位把所有字符连在一起,即得到结果:

5HB

输入

3

5

55

555

输出

5

1N

5HB

代码如下:

#include
using namespace std;
string s;
map  mp;
string addzero(string s){
    int len = s.length();
    string t;
    for(int i=0;i<10-len;i++) t+="0";
    return t+s;
}
char binTo(string s){
    int i = 0,ans = 0;
    for(i = 0;i<5;i++){
        if(s[i] == '0')
            continue;
        break;
    }
    while(i<5){
        ans = ans*2 +s[i++] - '0';
    }
    if(ans<10) return '0'+ans;
    return 'A'+ans-10;
}
int main()
{
    int tcase;
    scanf("%d",&tcase);
    while(tcase--){
        cin>>s;
        if(s=="0"){
            printf("0\n");
            continue;
        }
        int len = s.length();
        if(len%3==1) s = "00"+s;
        else if (len%3==2) s="0"+s;
        len = s.length();
        string ans;
        for(int i=0;i

 

你可能感兴趣的:(ACM_笔记)