进制转换

const int MAXN = 1e4+10;

char hashch[MAXN];
int hashnum[MAXN];

void init()
{
    char ch;
    for(int i=0;i<62;i++){
        if(i<10)                ch=i+'0';
        else if(i>=10&&i<36)    ch='A'+i-10;
        else                    ch='a'+i-36;
        hashch[i]=ch;
        hashnum[ch]=i;
    }
}

string change(int m,int n,string str)
{
    bool flag;
    string ans="";
    int tmp,quotient,remainder;
    while(true)
    {
        flag=false;
        remainder=0;
        string div="";
        int len=str.length();
        for(int i=0;i<len;i++){
            tmp=remainder*m+hashnum[str[i]];
            quotient=tmp/n;
            remainder=tmp%n;
            if(flag){
                div+=hashch[quotient];
            }
            else{
                if(quotient!=0){
                    flag=true;
                    div+=hashch[quotient];
                }
            }
        }
        ans=hashch[remainder]+ans;
        str=div;
        if(flag==false) break;
    }
    return ans;
}

留下评论