【机试备考】Day4-二进制

题目1

大家都知道,数据在计算机里中存储是以二进制的形式存储的。 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。 你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。
在这里插入图片描述

题解1

仿照手算的过程写,每次将n除以2,取余数存储,最后逆序输出

#include<iostream>
using namespace std;
int main()
{
    
    
    int n,a[33]={
    
    0};
    while(cin>>n)
    {
    
    
        int i;
        //对n除以2,取余数保存在数组a中
        for(i=0;n>0;i++){
    
    
            int s=n%2;
            a[i]=s;
            n=n/2;
        }
        //逆序输出
        for(;i>0;i--)
            cout<<a[i-1];
        cout<<endl;
    }
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        

题目2

Leetcode67-二进制求和
在这里插入图片描述

题解2

仿照手算过程,从低位到高位按位相加,相加得2则进位
参照了大佬的方法:
在这里插入图片描述

class Solution {
    
    
public:
	string addBinary(string a, string b) 
	{
    
    
        int asize=a.length();
        int bsize=b.length();
        // a,b谁短谁前面补0
        while(asize>bsize)
        {
    
    
            b='0'+b;//一定要注意+'0'的位置!不能放在b的后面
            bsize++;
        }
        while(asize<bsize)
        {
    
    
            a='0'+a;
            asize++;
        }
        //二进制加法过程
        int carry=0;//记录进位
        for(int i=asize-1;i>=0;i--)
        {
    
    
            int sum=a[i]-'0'+b[i]-'0'+carry;//这里-'0'相当于把string类型的a,b转成int类型
            a[i]=sum%2+'0';//运算完a[i]再转成字符
            carry=sum/2;
        }
        // 溢出则前面补1
        if(carry>=1)
            a='1'+a;
        return a;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43417265/article/details/112135044