[CODEUP] 1943 进制转换

Posted trav

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CODEUP] 1943 进制转换相关的知识,希望对你有一定的参考价值。

题目描述

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

输入

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

输出

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

样例输入

0
1
3
8

样例输出

0
1
11
1000

IDEA

长整数用字符串形式存储,主要解决的问题是字符串如何进行除法和余数。余数不用多说,就是最后一位余2就行。除法则应该按照平时手算除法的顺序进行,比如:

for (i = 0; i < len - 1; i++) {
    s[i+1] += (s[i] % 2) * 10;
    s[i] /= 2;
}

剩下的就是依照平时的整数进制转换的顺序来即可。

SOLUTION

#include <stdio.h>
#include <string.h>

int main()
{
    int i, len, num, sum;
    char s[100];
    char ans[100];

    while (scanf("%s", s) != EOF) {
        len = strlen(s);
        for (i = 0; i < len; i++)
            s[i] -= ‘0‘;
        
        num = 0;
        memset(ans, 0, sizeof ans);

        do {
            /* sum of each digit */
            sum = 0;

            /* % 2 */
            ans[num++] = s[len - 1] % 2 + ‘0‘;

            /* / 2 */
            for (i = 0; i < len - 1; i++) {
                s[i+1] += (s[i] - ((s[i] >> 1) << 1)) * 10;
                s[i] >>= 1;
                sum += s[i];
            }
            s[i] >>= 1;
            sum += s[i];
        } while (sum != 0);

        while (num--)
            putchar(ans[num]);
        putchar(‘
‘);
    }
    return 0;
}






以上是关于[CODEUP] 1943 进制转换的主要内容,如果未能解决你的问题,请参考以下文章

codeup-数制转换

c_cpp C片段将十进制转换为二进制

云效Codeup代码评审中的代码协同

Silverlight 中的十进制转换器无法正确处理丢失焦点

代码安全无忧—云效Codeup代码加密技术发展之路

代码管理平台Codeup测评