面试题答案
一键面试#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* decimalToBinary(int num) {
int isNegative = 0;
if (num < 0) {
isNegative = 1;
num = -num;
}
char* binary = (char*)malloc(33 * sizeof(char));
if (binary == NULL) {
return NULL;
}
binary[0] = '\0';
if (num == 0) {
strcpy(binary, "0");
} else {
while (num > 0) {
char temp[2];
temp[0] = (num % 2) + '0';
temp[1] = '\0';
strcat(binary, temp);
num /= 2;
}
// 字符串反转
int len = strlen(binary);
for (int i = 0; i < len / 2; i++) {
char temp = binary[i];
binary[i] = binary[len - i - 1];
binary[len - i - 1] = temp;
}
}
if (isNegative) {
char* newBinary = (char*)malloc((strlen(binary) + 2) * sizeof(char));
if (newBinary == NULL) {
free(binary);
return NULL;
}
strcpy(newBinary, "-");
strcat(newBinary, binary);
free(binary);
binary = newBinary;
}
return binary;
}
你可以这样调用这个函数:
int main() {
int num = 10;
char* binary = decimalToBinary(num);
if (binary != NULL) {
printf("%s\n", binary);
free(binary);
}
num = -10;
binary = decimalToBinary(num);
if (binary != NULL) {
printf("%s\n", binary);
free(binary);
}
return 0;
}