这个方法不用进行进制的转换,而是直接计算1的个数
#include<stdio.h>
#include<math.h>
#define L 5000
long int d(int num);
int cal(int num);
//int a(int num);
void wo(int num);
int main(){
int num;
scanf("%d",&num);
printf("%d的二进制形式有%d个1\n",num,cal(num));
//printf("%d的二进制形式为:%ld\n",num,d(num));
//a(num);
wo(num);
return 0;
}
//此方法没有进行进制转换,而是直接计算1的个数
int cal(int num){
int flag=1;
int n=0; //计数变量
while(flag){
if(num%2==1){
n++;
}
num=num/2;//新的被除数是原被除数除以2后的商
if(num==0){
flag=0;
}
}
return n;
}
十进制数转换成二进制数的方法:
void wo(int num){
//十进制转换成二进制
int flag=1;
int i=0;
int m[L];
int j;
while(flag){
m[i]=num%2;
num/=2;
i++;
if(num==0){
flag=0;
}
}
for(j=0;j<i;j++){
printf("%d",m[i-j-1]);
}
printf("\n");
}