考研算法 2022.2.25

165 阅读1分钟

考研算法

题目

题目链接

题目要求

十进制转换为二进制

C++代码

#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>

using namespace std;

vector<int> div(vector<int> a,int b)//用于除法运算
{
    vector<int> c;
    int r=0;
    for (int i=a.size()-1;i>=0;i--) //可以理解为模拟除法
    {
        r=r*10+a[i];
        c.push_back(r/b);
        r=r%b;
    }
    reverse(c.begin(),c.end());//反转
    while(c.size()&&c.back()==0) c.pop_back();//去掉前面的0
    return c;
}

int main()
{
    string s;
    while (cin>>s)
    {
        vector<int> a;
        for (int i=0;i < s.size();i++)//vector特点需要将数字个位放在前面
        {
            a.push_back(s[s.size()-i-1]-'0');//里面是字符,要把字符变为数字
        }
        
        string res;
        if (s=="0")
        {
            res="0";
        }
        else{
            while(a.size())
            {
                res+=to_string(a[0]%2);
                a=div(a,2);
            }
        }
        reverse(res.begin(),res.end());//根据十进制转二进制,结果需要反转
        cout<<res<<endl;
    }
    return 0;
}

知识点

vector

变长数组,支持随机访问,不支持任意位置插入

size()返回长度

begin()/end()前闭后开结构,我认为返回的指针(迭代器?)

front()/back()返回第一个和最后一个元素

push_back() 尾部插入

pop_back() 尾部删除

reverse

用于反转

C++ reverse函数的用法 - yuanch2019 - 博客园 (cnblogs.com)

to_string

用于转换成字符串

C++ 之 to_string_入门记-CSDN博客_to_string

python代码

import sys 
for line in sys.stdin:
    a = int(line)
    b=[]
    if a==0:
        print(0)
        continue
    while a>=1:
        b.append(a%2)
        a=a//2
    b.reverse()
    for i in b:
        print(i,end='')
    print()

知识点

输入停止时,停止程序

import sys 
for line in sys.stdin:
    a = int(line)

列表倒序

b.reverse()