#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <limits.h>


int len(char* str)
{
    int i;

    i = 0;
    while (str[i] != '\0')
    {
        i++;
    }
    return i;
}

int check_base(char* base)
{
    int base_len;
    int j;
    int i;

    j = 0;
    i = 0;
    base_len = len(base);
    if (base_len == 1 || base[0] == '\0')
    {
        return 0;
    }
    while (base[i] != '\0')
    {
        j = i + 1;
        while (base[j] != '\0')
        {
            if (base[i] == base[j] || base[j] == '+' || base[j] == '-')
                return 0;
            j++;
        }
        i++;
    }
    return 1;
}

void ft_print(char c)
{
    printf("%c", c);
}

void ft_putnbr_base(int nbr, char* base)
{
    int f;
    long long l;

    l = (long)nbr;
    f = len(base);
    if (check_base(base))
    {
        if (l < 0)
        {
            ft_print('-');
            l *= -1;
        }
        if (l < f)
            ft_print(base[l]);
        else
        {
            ft_putnbr_base(l / f, base);
            ft_print(base[l % f]);
        }
    }
}


int main(void)
{
    char base_empty[] = "";
    char base_zero[] = "0";
    char base_alpha[] = "a";
    char base_repeated[] = "aa";
    char base_invalid[] = "1+2";
    char base_binary[] = "01";
    char base_octal[] = "01234567";
    char base_hex[] = "0123456789abcdef";
    int minus_num = INT_MIN;

    // ft_putnbr_base 함수를 호출하여 출력을 확인하는 예제 코드
    printf("assertion: base의 사이즈가 0이나 1이면 아무것도 출력하지 않는다\n");
    ft_putnbr_base(239283, base_empty);
    ft_putnbr_base(239283, base_zero);
    ft_putnbr_base(239283, base_alpha);
    printf("\n");

    printf("assertion: base에 같은 문자를 두번(이상) 반복하면 아무것도 출력하지 않는다\n");
    ft_putnbr_base(239283, base_repeated);
    ft_putnbr_base(239283, "99"); // 직접 문자열 리터럴로도 테스트
    printf("\n");

    printf("assertion: base에 + 또는 -를 포함하면 아무것도 출력하지 않는다\n");
    ft_putnbr_base(239283, base_invalid);
    ft_putnbr_base(239283, "12-");
    ft_putnbr_base(239283, "+12-");
    printf("\n");

    printf("assertion: 주어진 nbr 값을 base 체계에 맞춰 출력한다\n");
    ft_putnbr_base(2133, base_binary);
    printf("\n");
    printf("100001010101\n");

    ft_putnbr_base(2147483647, base_binary);
    printf("\n");
    printf("1111111111111111111111111111111\n");

    ft_putnbr_base(2132893, base_octal);
    printf("\n");
    printf("10105635\n");

    ft_putnbr_base(2132893, base_hex);
    printf("\n");
    printf("208b9d\n");

    printf("case: base 체계가 nbr보다 더 큰 경우\n");
    ft_putnbr_base(3, base_hex);
    printf("\n");
    printf("3\n");

    printf("case: 0\n");
    ft_putnbr_base(0, base_hex);
    printf("\n");
    printf("0\n");

    printf("assertion: 음수도 처리해야한다\n");
    ft_putnbr_base(minus_num, base_binary);
    printf("\n");
    printf("-10000000000000000000000000000000\n");

    ft_putnbr_base(minus_num, base_hex);
    printf("\n");
    printf("-80000000\n");

    ft_putnbr_base(-34334, base_octal);
    printf("\n");
    printf("-103036\n");

    ft_putnbr_base(-34334, base_hex);
    printf("\n");
    printf("-861e\n");

    ft_putnbr_base(0, base_hex);
    printf("\n");
    printf("0\n");

    ft_putnbr_base(15, base_hex);
    printf("\n");
    printf("f\n");

    ft_putnbr_base(16, base_hex);
    printf("\n");
    printf("10\n");

    ft_putnbr_base(INT_MAX, base_hex);
    printf("\n");
    printf("7fffffff\n");

    ft_putnbr_base(INT_MIN, base_hex);
    printf("\n");
    printf("-80000000\n");

    ft_putnbr_base(-34334, "abc");
    printf("\n");
    printf("-bcacaacbcc\n");
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: