我有一个递归方法将十进制数转换为C
中的二进制数long decimalToBinary(long n)
{
if(n == 0) {
return 0;
}
else {
return (10*decimalToBinary(n/2))+(n%2);
}
}
它打印出正确的输出,但我试图将它放在前导零和二进制数之前,如果它不能被4整除并以{{1的组'打印出来}}。 (例如4
- > 100101100
)
我正在考虑使用数组,而不是像我现在那样返回答案,将其放入数组并在0001 0010 1100
方法中进行修改。然后我可以添加一个空格并在开头添加零。
有没有更好的方法来实现这一目标?
答案 0 :(得分:0)
在decimalToBinary
中,您可以创建char
数组,而不是创建小数值。此char
数组将以相反的顺序包含二进制数字,因此当您在main
函数中打印数组时,需要以相反的顺序打印它们。
decimalToBinary
将如下所示:
char *decimalToBinary(long n)
{
int rem, mult = -1, i = 0, len = 5;
char *arr = (char *) calloc(len, sizeof(char));
// Loop until multiplier is not 0
while (mult != 0) {
mult = n / 2;
rem = n % 2;
n = mult;
// If we are approaching end of string, increase its size
if (mult != 0 && i == len) {
len += 4;
arr = (char *) realloc(arr, len);
}
arr[i++] = rem + '0'; // Convert int to char
}
arr[i] = '\0'; // End-of-string character
return arr;
}
然后,您可以从main
调用此函数并按以下方式打印:
// Convert decimal to binary (char array)
char *arr = decimalToBinary(n);
// Print leading 0s
int len = strlen(arr);
int padding = (len % 4) == 0 ? 0 : 4 - (len % 4);
int count = 0;
while (padding > 0) {
printf("0");
--padding;
++count;
}
// Print the binary digits in reverse
int i = len - 1;
while (i >= 0) {
// Print a space after every 4 chars
if (count > 0 && count % 4 == 0) {
printf(" ");
}
printf("%c", arr[i]);
--i;
++count;
}
printf("\n");
我已尝试使用此代码并且可以正常运行。例如,十进制数280
将打印为0001 0001 1000
。