进制转换

进制转换

–codeup.cn 算法笔记习题 https://github.com/ultraji/codeup

题目描述

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

输入

多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)

输出

每行输出对应的二进制数。

样例输入

985
211
1126

样例输出

1111011001
11010011
10001100110

思路

通过模拟除法运算实现

代码

#include 
#include 

using namespace std;

int main()
{
    char str[31] = {'\0'};
    int res[200] = {0};
    while(cin >> str)
    {
        int n = strlen(str);
        for(int i = 0; i < n; i++)
            str[i] -= '0';//char to int(伪)
        int p = 0,j = 0;
        while(j < n)
        {
            int temp = 0;
            for(int i = j; i < n;i++)//模拟除法
            {
                temp = temp*10+str[i];
                str[i] = temp/2;
                temp = temp%2;
            }
            res[++p] = temp;//每一次除2后的余数
            if(str[j] == 0) j++;//最高位为 0 时,下次循环从下一位开始
        }
        ++p;
        while(--p)
        {
            cout << res[p];
        }
        cout << endl;
    }
    return 0;
}

你可能感兴趣的:(进制转换)