C语言实现大数转二进制

本文介绍了使用C语言将大数转换为二进制的方法,通过列竖式不断除以2获取商和余数。经过多次除法运算,当商为0时结束,将余数逆序即得二进制数。在实际编程中,需注意处理借位和判断结束条件等关键细节。
摘要由CSDN通过智能技术生成

基本思想是列竖式,每轮求出商和余数。
例如:
大数字符串是“1234”
第一次 “1234” / 2 = 0617 … 0

在本文例子中,首先将大数最高位字符 '1' 转换成整数转换成整数 1   
然后计算 1 / 2 = 0, 再把 0 转换成字符 '0' 放到缓存区中,这是得到商  
的最高位。计算次高位 '2' 时,由于前一位 1 % 2 = 1,此时会有借位  
发生,也就是 (1*10 + 2) / 2 = 6,作为商的次高位,剩下位的计算和前面的  
一样。

第二次 “0617” / 2 = 0308 … 1
第三次 “0308” / 2 = 0154 … 0
第三次 “0154” / 2 = 0077 … 0
第四次 “0077” / 2 = 0038 … 1
第五次 “0038” / 2 = 0019 … 0
第六次 “0019” / 2 = 0009 … 1
第七次 “0009” / 2 = 0004 … 1
第八次 “0004” / 2 = 0002 … 0
第九次 “0002” / 2 = 0001 … 0
第十次 “0001” / 2 = 0000 … 1
到最后商为0是结束,余数倒过来输出即可得到对应的二进制数"10011010010",
在具体实现的时候值得关注的问题是借位,判断结束的条件。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>

#define BIGNUMLEN 1024

// reverse a string 
void reverse(char *num)
{
   
	int i, j, len;
	len = strlen(num);
	j = len - 1;
	for (i = 0; i < len / 2; i++)
	{
   
		// exchange num[i] and num[j]
		num[i] = num[i] ^ num[j];
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值