题目描述

将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

解题思路

众所周知,我们在进行进制转换的时候是将某个数与进制做除法,其余数为应该添加到最低位的值。假如十进制数123要转化成二进制:
123/2 我们得到61和余数1  ,所以我们得到的1就应该放在最低位
这时我们再把61/2,....以此类推知道被除数为0的时候就计算完成
string converse(int d,string str,int b)
{
    int k,t;
    string res="";
    for(int i=0;i<str.size();)
    {
        k = 0;//高位向低位的进位
        for(int j=i;j<str.size();j++)
        {
             //当前位的商,当前位的余数
            t= (k*d+str[j]-'0')%b;
            str[j] =(k*d+str[j]-'0')/b+'0';
            k=t;
        }
        res+=to_string(k);
        while(str[i] == '0') i++;
    }
    reverse(res.begin(),res.end());
    return res;
}