一、问题描述
十进制数是指各位数字全部由小于10的数字(0..9)组成的数值,如123、45678等。二进制数是指各位数字全部由小于2的数字(0..1)组成的数值,如10、1011等。将十进制数转换为二进制数是将全部由小于10的数字组成的数值转换为全部由小于2的数字组成的数值,如十进制数100转换为二进制数为1100100。
二、算法思想
将十进制数转换为二进制数的算法是采用辗转取余法,即将待转换数不断除2取余,记录余数,用新的商继续除2取余,直到该数为零。由于余数小于2,故所有余数组成的数值全部由0、1组成。再对这些余数进行逆置即可。
//辗转取余
while(num > 0)
{
arr[n++] = num % 2 + '0';
num /= 2;
}
//逆置余数列表
for(i=0; i
temp = arr[i];
arr[i] = arr[n-1-i];
arr[n-1-i] = temp;
}
三、参考程序
#include
#include
#define MAX 33
using namespace std;
/* 十进制数转换为二进制数(字符串表示) */
char *decToBin(long num);
int main()
{
long dec = 123456789;
cout<<"10进制数:\t"<
}
/* 十进制数转换为二进制数(字符串表示) */
char *decToBin(long num)
{
char *arr;
char temp;
int i, n;
arr = (char *)malloc(sizeof(char) * MAX);
n = 0;
while(num > 0)
{
arr[n++] = num % 2 + '0';
num /= 2;
}
for(i=0; i
temp = arr[i];
arr[i] = arr[n-1-i];
arr[n-1-i] = temp;
}
arr[n] = '\0';
return arr;
}
四、运行测试:
10进制数: 123456789
2进制数: 111010110111100110100010101