十进制转二进制(C++)

本文介绍了一种使用C++实现的十进制转二进制的方法,通过除二取余的方式,无需使用数组即可实现从后往前取余数。此方法同样适用于十进制转其他进制。

除二取余法

相信大家应该都知道,十进制转k进制的方法常用的就是除k取余的方法,这里针对这个方法,给出了C++的代码。需要注意的是,除二取余的方法,对于余数的选取是从后往前取的,所以在代码中,也要解决这个问题才行。

思路分析

 模仿不停地除2的过程,每次除2之后用 % 取余数i;用 / 作为下一次除2的被除数temp;j初始化为1,每次除了2之后,j = j*10。最终输出的结果result在每次除2的迭代中,result = i*j + result;这个从后往前取余数的方法就是不断地result = i*j + result这样,不需要使用数组等方式逆序取了。

同时,也要考虑到十进制的负数如何转化,这里就是while(temp)来解决的。在while语句中,括号内的值只要不是0就为真,这样就包含了负数的问题。

上代码

int decToBin(int dec){
	int result = 0, temp = dec, j = 1;
	while(temp){
		result = result + j * (temp % 2);
		temp = temp / 2;
		j = j * 10;
	}
	return result;
}

 总结

这个方法,可以推广到十进制转k进制,需要更改的地方就是 %j 和 /j 而已。以这种方式逆序取余数还是很特别的,所以写篇博客mark一下:)

### C++ 中实现十进制二进制的方法 在 C++ 编程语言中,可以通过多种方式实现十进制二进制换。以下是几种常见的方法及其具体实现。 #### 方法一:使用字符串反的方式 这种方法通过不断取模运算获取每一位上的值,并将其存入字符串中,最后翻字符串得到最终结果。 ```cpp #include <iostream> #include <algorithm> // 提供 reverse 函数 using namespace std; int main() { int a; cin >> a; string s1; while (a) { s1 += '0' + a % 2; // 取当前位并拼接到字符串上 a /= 2; // 更新数值 } reverse(s1.begin(), s1.end()); // 字符串翻操作 cout << s1; // 输出结果 } ``` 上述代码实现了基本的功能逻辑[^1]。 --- #### 方法二:数组存储二进制位再倒序输出 此方法利用数组来保存每次计算得出的二进制位,随后按照相反顺序打印出来完成整个过程。 ```cpp #include <stdio.h> void decToBinary(int decimal) { int binary[32]; // 定义一个长度为32的数组用来存放每位的结果 int i = 0; // 初始化索引变量i while (decimal > 0) { // 循环直到输入数字变为零为止 binary[i] = decimal % 2; // 记录下余数作为该位置对应的二进制位 decimal = decimal / 2; // 对原数做整除处理以便继续提取更高一位的信息 i++; } printf("Binary representation: "); for (int j = i - 1; j >= 0; j--) { // 倒叙遍历之前填充好的数组部分区域即可获得完整的二进制形式表达 printf("%d", binary[j]); } printf("\n"); } int main() { int decimal; printf("Enter a decimal number: "); scanf("%d", &decimal); decToBinary(decimal); // 调用函数执行实际业务流程 return 0; } ``` 这段程序展示了另一种思路下的解决方案[^2]。 --- #### 方法三:递归版本 除了迭代外还可以采用递归来简化某些场景中的编码难度: ```cpp #include <iostream> using namespace std; void toBinary(int n){ if(n/2 != 0){ // 如果商不等于0,则先递归下去求解更低位的情况 toBinary(n/2); } cout<<n%2; // 处理完所有高位之后回溯过程中依次输出各个比特位的内容 } int main(){ int N; cout<<"Please enter an integer:"; cin>>N; toBinary(N); return 0; } ``` 这里提供了一个基于递归机制的设计方案[^3]。 --- #### 总结说明 以上三种不同的技术路线都可以有效地解决从十进制二进制化的任务需求。无论是借助辅助数据结构如字符串或者固定大小的一维表列还是单纯依靠控制流语句本身特性构建起来的小型子例程都能满足预期目标达成条件。值得注意的是,在选择具体的实施方案时还需要综合考虑诸如性能开销、可读性和维护便利程度等因素的影响做出合理判断决策。
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值