#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");
}
To embed this program on your website, copy the following code and paste it into your website's HTML: