任意长度的十进制数转二进制数C语言实现
程序员文章站
2022-03-08 15:52:41
...
主要思路:
1.核心思想依然是经典的除2取余法。但是由于C语言中整型数据中能够存放的最大的整数为unsigned long int数据,占4B,能够表示0 ~ 2^32 - 1,约为42亿左右的整数。所以对于那些大整数则无法直接使用除2取余的方法来转换;
2.本程序采用逐位除2进位的方法实现转换;
3.采用该方法理论上(不考虑计算机硬件存储空间)可实现任意大小的十进制数转二进制数。
/*--------------------------------------------------------------------------------
功能:将一个100000位以内的十进制数转换成二进制数。
每次运行可实现多次输入输出,Ctrl + Z结束运行。
运行示例:
12
1100
100
1100100
9999999999999999999999999999999
11111100011011110111110001000000010001011000000100100010100101100100110011111111
11111111111111111111111
----------------------------------------------------------------------------------
Author: Zhang Kaizhou
Date: 2019-3-10 15:29:56
---------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100000
void decimal_to_binary(char * str);
int main(){
char str[MAXSIZE];
while(scanf("%s", str) != EOF){ // Ctrl + Z 退出循环
decimal_to_binary(str);
}
return 0;
}
void decimal_to_binary(char * str){ // 十进制转二进制
int i = 0, c, j = 0, r, k = 0, len = strlen(str);
int decimal[MAXSIZE], bin[MAXSIZE] = { 0 };
for(j = 0; j < len; j++){ // 字符串转数字数组
decimal[j] = str[j] - '0';
}
while(i < len){ // 逐位实现十进制转二进制
c = 0;
for(j = i; j < len; j++){
r = (decimal[j] + c * 10) % 2; // 余数
decimal[j] = (decimal[j] + c * 10) >> 1; // 商
c = r; // 进位
}
bin[k++] = c; // 保存进位
while(decimal[i] == 0 && i < len){
i++;
}
}
for(i = k - 1; i >= 0; i--){ // 逆序输出
printf("%d", bin[i]);
}
printf("\n");
return;
}
上一篇: WebMagic整体框架