MST

星途 面试题库

面试题:C语言实现十进制转二进制

请使用C语言编写一个函数,将输入的十进制整数转换为二进制字符串并输出。例如,输入10,输出为'1010'。要求考虑负数情况,且尽量优化代码性能。
43.9万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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;
}