[保研/考研机试] KY30 进制转换-大整数转二进制 清华大学复试上机题 C++实现

描述

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

输入描述:

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

输出描述:

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

示例1

输入示例:

复制代码
0
1
3
8

输出示例:

复制代码
0
1
11
1000

思路:

仍然是"除2取余法",主要的区别在于这次要对一个字符串表示的大整数取余,因为输入的十进制数长度最多为30位数字,只能用字符串来表示。

将输入的十进制数字逐步除以2,并将每一步的余数保存在二进制数数组中。然后,从数组末尾开始输出数组中的元素,以得到正确的二进制表示。

函数 Divided 用于实现字符串表示的大整数的除法操作,并最后还去掉了结果字符串开头多余的0。整个程序通过循环处理多组输入的十进制数字。

源代码:

cpp 复制代码
#include<iostream>
#include<string>
#include<vector>
using namespace std;

// 用于将字符串表示的大整数除以 x,并返回商
string Divided(string str, int x) {
    int reminder = 0;
    for (int i = 0; i < str.size(); i++) {
        int current = str[i] - '0' + reminder * 10;  // 将当前位转换为整数并加上上一次的余数
        str[i] = current / x + '0';  // 将商转换为字符并保存到字符串中
        reminder = current % x;  // 更新余数
    }
    int pos = 0;
    while (str[pos] == '0') {
        pos++;  // 去掉结果字符串开头多余的零
    }
    str = str.substr(pos);  // 更新结果字符串

    return str;
}

int main() {
    string s;
    while (cin >> s) {
        vector<int> binary;  // 用于存储二进制数的每一位
        while (s.size() != 0) {
            int last = s[s.size() - 1] - '0';  // 获取字符串最后一位的整数值
            binary.push_back(last % 2);  // 将最后一位对2取余并保存到二进制数数组中
            s = Divided(s, 2);  // 将原字符串除以2,得到新的字符串
        }
        for (int i = binary.size() - 1; i >= 0; i--) {
            cout << binary[i];  // 从数组末尾开始输出二进制数,得到正确的二进制表示
        }
        cout << endl;
    }

    return 0;
}

提交结果:

相关推荐
hansang_IR3 分钟前
【题解】类欧几里得算法
c++·数学·算法·类欧几里得
陈天伟教授3 分钟前
人工智能应用- 人工智能交叉:06.解析蛋白质宇宙
人工智能·神经网络·算法·机器学习·推荐算法
We་ct6 分钟前
LeetCode 114. 二叉树展开为链表:详细解题思路与 TS 实现
前端·数据结构·算法·leetcode·链表·typescript
像素猎人7 分钟前
范围for语法(除for循环/while循环/do...while循环的第四种循环)
数据结构·算法
12 分钟前
2.20进制转化,表达式求值,删除字符
开发语言·c++·算法
追随者永远是胜利者14 分钟前
(LeetCode-Hot100)461. 汉明距离
java·算法·leetcode·职场和发展·go
郝学胜-神的一滴17 分钟前
单例模式:从经典实现到Vibe Coding时代的思考
开发语言·c++·程序人生·单例模式·设计模式·多线程
努力学算法的蒟蒻18 分钟前
day90(2.19)——leetcode面试经典150
算法·leetcode·面试
啊阿狸不会拉杆24 分钟前
《计算机视觉:模型、学习和推理》第 5 章-正态分布
人工智能·python·学习·算法·机器学习·计算机视觉·正态分布
样例过了就是过了30 分钟前
LeetCode热题100 缺失的第一个正数
数据结构·算法·leetcode