加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[CODEUP] 1943 进制转换

发布时间:2020-12-14 05:14:03 所属栏目:大数据 来源:网络整理
导读:题目描述 将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。 输入 多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30bits的整数) 输出 每行输出对应的二进制数。 样例输入 0 1 3 8 样例输出 0

题目描述

将一个长度最多为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,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(‘n‘);
    }
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读