计算机考研复试_牛客_KY30——进制转换

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入
0
1
3
8
输出
0
1
11
1000

思路

大整数除法(30位数字也不是很大,用两个long long类型就可以了)

题解

#include <cstdio>
#include <cstdlib>
#include <stack>
#include <cstring>

using namespace std;

int main() {
    char a[31];
    stack<int> ans;
    while(~scanf("%s", a)){
        int len = strlen(a+15);
        long long base = 5;
        if(len){
            while(len--){
                base *= 10;
            }
            base /= 10;
        } else {
            base /=5;
        }
        long long tail = atoll(a+15);
        a[15] = 0;
        long long head = atoll(a);
        while(tail || head){
            if(base == 1)
                ans.push(head&1);
            else
                ans.push(tail&1);
            tail = tail/2 + (head&1)*base;
            head /= 2;
        }
        while(!ans.empty()){
            if(ans.top() != 0) break;
            ans.pop();
        }
        if(ans.empty()) printf("0");
        while(!ans.empty()){
            printf("%d", ans.top());
            ans.pop();
        }
        printf("\n");
    }
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容