IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言相关习题(移位操作、递归) -> 正文阅读

[C++知识库]C语言相关习题(移位操作、递归)

目录

1.?统计二进制数中1的个数

2. 比较两个二进制数中,不同位的个数

3.?交换两个变量,不创建临时变量

4. 递归实现字符串逆序

5.?递归计算一个非负整数的数字之和;例如:123 输出6

6.?递归实现n的k次方(正数)


1.?统计二进制数中1的个数

int Count_bit1(int a)//统计二进制位中1的个数
{
	int count = 0;
	//类比十进制中,获得每一位,123,123%10=3,123/10=12,12%10=2
	while(a != 0)
	{
		if(a % 2 == 1)
			count++;
		a = a/2;
 	}
	return count;
}
int Count_bit2(int a)//统计二进制位中1的个数
{
	int count = 0;
	int i = 0;
	for(i = 0; i<32; i++)
	{
		//a = a >> i;
		if(((a>>i) & 1) == 1)//移位操作本身不会改变变量的值
			count++;
	}
	return count;
}
int Count_bit3(int a)//统计二进制位中1的个数
{
	int count = 0;
	while(a)
	{
		a = a & (a-1);//a & (a-1) 每一次相邻两位数按位与都会减少一个二进制的1
		count++;
	}
	return count;
}
int main(){
	int a = -1;
	int count1 = Count_bit1(a);//该函数对负数不适用
	int count2 = Count_bit2(a);//通过位操作符来计算
	int count3 = Count_bit3(a);//最精简的一种写法
	printf("%d\n", count1);
	printf("%d\n", count2);
	printf("%d\n", count3);
}

2. 比较两个二进制数中,不同位的个数

int Compare_bit1(int a, int b)
{
	int count = 0;
	int i = 0;
	for(i=0; i<32; i++)
	{
		if(((a>>i)&1) != ((b>>i)&1))
			count++;
	}
	return count; 
}
int Compare_bit2(int a, int b)
{
	int tmp = a^b;//直接用异或,相同位为0,不同位为1;
	return Count_bit1(tmp);//然后用函数统计tmp中有多少个1;
}
int main(){
	int a = 0;
	int b = 7;
	int ans1 = Compare_bit1(a, b);//每一位分别比较
	int ans2 = Compare_bit2(a, b);//用异或来统计:相同位为0,不同位为1;
	printf("%d\n",ans1);
	printf("%d\n",ans2);
}

3.?交换两个变量,不创建临时变量

	int a = 5; int b = 3;
	a = a+b; b = a-b; a = a-b;
	printf("%d %d",a,b);
	
	int a =5; int b = 3;
	a = a^b;//用异或的方法;
	b = a^b;
	a = a^b;
	printf("%d %d",a,b);

4. 递归实现字符串逆序

void Reverse_string2(char arr[])
{
	char tmp = arr[0];
	int sz = strlen(arr);
	arr[0] = arr[sz-1];
	arr[sz-1] = '\0';
	if(strlen(arr+1) >= 2)
	{
		Reverse_string2(arr+1);
	}
	arr[sz-1] = tmp;
}
int main(){
    char arr[] = "abcdef";
	int sz = strlen(arr);
	Reverse_string2(arr);//递归的方法
	printf("%s\n",arr);}

5.?递归计算一个非负整数的数字之和;例如:123 输出6

int Count_sum1(int a)
{
	int sum = 0;
	while(a != 0)
	{
		sum += a%10;
		a /= 10;
	}
	return sum;
}

int Count_sum2(int a)
{
	if (a < 10)
		return a;
	else
		return Count_sum2(a/10) + a%10;
}

int main(){
	int a = 123;
	//int sum = Count_sum1(a);//循环的方法
	int sum = Count_sum2(a);//递归的方法
	printf("%d\n",sum);
}

6.?递归实现n的k次方(正数)

int Pow(int n, int k)
{
	if(k>=1)
		return Pow(n,k-1) * n;
	else
		return 1;
} 
int main(){
	int n = 5;
	int k = 2;
	int ret = Pow(n,k);
	printf("%d\n", ret); }

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 18:48:02  更:2022-06-29 18:50:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年3日历 -2024/3/29 8:59:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码