超大正整数二进制转化

                               //待转化的超大二进制正整数
		String s = "" + Long.MAX_VALUE;
		BigInteger TWO = new BigInteger("2");
		BigInteger ZERO = new BigInteger("0");
		BigInteger b1 = new BigInteger(s);

		String temp;
		StringBuffer sb = new StringBuffer();	
		do {
			temp = b1.remainder(TWO).toString();
			sb.append(temp);
		} while((b1 = b1.divide(TWO)).compareTo(ZERO) != 0);
	
		System.out.println(s + "的二进制为:\n" + sb.reverse());

 

 

9223372036854775807的二进制为:
111111111111111111111111111111111111111111111111111111111111111

 

### 超大整数到二进制的转换算法 对于超大整数(即超出标准数据类型的范围),可以采用字符串来表示这些数值并完成相应的运算。下面介绍一种基于字符串处理的方法来进行超大整数转二进制的操作。 #### 字符串模拟除法取余过程 由于C语言内置的数据类型无法直接支持任意长度的大数,因此需要自定义函数用于执行除法和求模操作。这里提供了一个简单的思路:每次都将当前被除数减去尽可能多倍的基数(本例中为2),直到剩余部分小于该基数为止;这个过程中记录下商以及最后剩下的那个值作为新一位的结果[^1]。 ```c #include <stdio.h> #include <string.h> // 辅助功能:从低位向高位逐位做除以base后的取模运算,并返回最终得到的小于base的那个数 char divideByBase(char* numStr, int base); void decimalToBinary(const char* decNum){ char temp[50]; // 假设输入不会超过此长度 strcpy(temp,decNum); while(strlen(temp)>0 && strcmp(temp,"0")!=0){ printf("%c",divideByBase(temp,2)); // 输出本次计算所得的一位二进制数字 } } // 实现上述提到的核心逻辑——通过不断减少的方式获取每一位上的结果 char divideByBase(char* numStr, int base){ int index=0; long remainder=0; for(;numStr[index]!='\0';++index){ remainder = remainder*10 + (numStr[index]-'0'); if(remainder >= base){ numStr[index]=(remainder/base)+'0'; remainder%=base; }else{ numStr[index]='0'; } } // 移动前导零并将结尾置为空字符标记结束位置 index--; while(index>=0&&numStr[index]=='0') --index; numStr[++index]='\0'; return '0'+remainder; } ``` 这段代码展示了如何利用字符串形式存储非常大的十进制正整数,并将其逐步转化为对应的二进制表达方式。注意这里的`decimalToBinary()`会倒序打印出各位二进制数码,如果想要获得正常顺序,则可以在收集所有位之后再反转输出序列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值