题目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
题解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;
}
};