二进制与递归

**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;
}

猜你喜欢

转载自blog.csdn.net/zjgyjd/article/details/83149963