输出二进制表示 (蓝桥杯算法提高)

题目传送门

题意:对n∈[-128,127]输出其二进制形式

思路1:分正负数数讨论模拟二进制(复杂代码)
思路2:按位与判断(简洁代码)

思路1代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,f,ans,i;
	while(cin>>n){
		i=f=ans=0;
		int num[10]={};
		char a[10]="";
		if(n<0) n=-n,f=1;
		while(n) a[i++]=n%2,n/=2;
		for(int i=7;i>=0;i--) ans=ans*10+a[i];
		sprintf(a,"%08d",ans);
		if(f){  a[0]='1';
				for(int i=1;i<8;i++) a[i]=='0'?a[i]='1':a[i]='0';
				for(int i=7,p=1;i>0;i--)
				 	if(p)
				 	if(a[i]=='0') a[i]='1',p=0;
				 	else a[i]='0';
			 }
		 	cout<<a<<endl;
		} 
}

思路2代码

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n;
	while(cin>>n){
		for(int i=7,j=1<<7;i>=0;i--,j=1<<i)
				printf(j&n?"1":"0");
		puts("");
	}
	return 0;
}