**1.写一个函数返回参数二进制中 1 的个数 **
二进制的运算方式正巧满足了递归的结果,利用除二计算余数,同时在将最后得到的余数按照相反的方向输出,利用全局变量在整个过程中记录所需值,有需要时还可以用全局数组储存二进制数;
//写一个函数返回参数二进制中 1 的个数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int count = 0;//全局变量查看1的值
int count_one_bits(unsigned int value) {
//1.利用取余转换为二进制
int temp = 0;
if (value != 0){
temp = value % 2;
count_one_bits(value / 2);
}
printf(" %d ", temp);
if (temp == 1){
count++;
}
return count;
}
int main(){
//给出想要查找的数
unsigned int num;
scanf("%d", &num);
int nums = count_one_bits(num);
printf("\n%d的二进制中一的个数为:%d\n", num, nums);
system("pause");
return 0;
}
**2.获取一个数二进制序列中所有的偶数位和奇数位,
分别输出二进制序列。 **
利用相同的套路分别得到二进制的每一位,同时增添一个参数用于判断当前需要输出的是奇数位还是偶数位;
//获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int count = 0;
void ChangeTow(unsigned int num,int flag){
int temp = 0;
if (num != 0){
temp = num % 2;//0 1 0
ChangeTow(num / 2,flag);
}
count++;
if (flag == 0){
if (count % 2 == 0){
printf("%d ", temp);//0
}
}
if (flag != 0){
if (count % 2 != 0){
printf("%d ", temp);
}
}
}
int main(){
//获取一个数
unsigned int num;
scanf("%d", &num);
//化为二进制
printf("偶数项为:\n");
ChangeTow(num,0);
count = 0;
printf("\n奇数项为:\n");
ChangeTow(num, 1);
printf("\n");
system("pause");
return 0;
}
3.输出一个整数的每一位。
//输出整数的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void Prtnum(int n){
if (n > 9){
Prtnum(n/10);
}
printf("%d\n", n % 10);
}
int main(){
//输入一位数
printf("请输入一个整数:\n");
int num;
scanf("%d",&num);
Prtnum(num);
system("pause");
return 0;
}
**4.两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? **
在函数中同时输入这两个数,仅当位数多的一个数到达尾部时在停止递归,位数小的数将用零补位,当同位上余数值不同时让全局变量加一;
//两个整数的二进制数有多少位不同
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int count = 0;
int ChengeNum(int n1, int n2){
if (n1 > 0 || n2 > 0){
ChengeNum(n1 / 2, n2 / 2);
}
if (n1 % 2 != n2 % 2){
count++;
}
return count;
}
int main(){
printf("请输入两个数:\n");
int num1;
int num2;
scanf("%d %d", &num1, &num2);
int result = ChengeNum(num1, num2);
printf("%d和%d的二进制相差%d位\n",num1,num2,result);
system("pause");
return 0;
}