Untitled

mail@pastecode.io avatar
unknown
plain_text
23 days ago
2.1 kB
3
Indexable
Never
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

typedef struct s_dict
{
	char *key;
	char *value;
} t_dict;

t_dict g_dict[] = {
		{"0", "zero"}, {"1", "one"}, {"2", "two"}, {"3", "three"}, {"4", "four"}, {"5", "five"}, {"6", "six"}, {"7", "seven"}, {"8", "eight"}, {"9", "nine"}, {"10", "ten"}, {"11", "eleven"}, {"12", "twelve"}, {"13", "thirteen"}, {"14", "fourteen"}, {"15", "fifteen"}, {"16", "sixteen"}, {"17", "seventeen"}, {"18", "eighteen"}, {"19", "nineteen"}, {"20", "twenty"}, {"30", "thirty"}, {"40", "forty"}, {"50", "fifty"}, {"60", "sixty"}, {"70", "seventy"}, {"80", "eighty"}, {"90", "ninety"}, {"100", "hundred"}, {"1000", "thousand"}, {"1000000", "million"}, {"1000000000", "billion"}};

char *get_number_name(int nbr)
{
	char key[12];
	sprintf(key, "%d", nbr);
	for (int i = 0; i < sizeof(g_dict) / sizeof(t_dict); i++)
	{
		if (strcmp(g_dict[i].key, key) == 0)
		{
			return g_dict[i].value;
		}
	}
	return NULL;
}

void print_space()
{
	write(1, " ", 1);
}

void print_number(int n)
{
	write(1, get_number_name(n), strlen(get_number_name(n)));
}

void ft_print(int n);

void handle_thousands(int n)
{
	if (n >= 1000)
	{
		ft_print(n / 1000);
		print_space();
		print_number(1000);
		if (n % 1000 != 0)
		{
			print_space();
			ft_print(n % 1000);
		}
	}
}

void handle_hundreds(int n)
{
	if (n >= 100)
	{
		ft_print(n / 100);
		print_space();
		print_number(100);
		if (n % 100 != 0)
		{
			print_space();
			ft_print(n % 100);
		}
	}
}

void handle_tens(int n)
{
	if (n >= 20)
	{
		print_number((n / 10) * 10);
		if (n % 10)
		{
			print_space();
			print_number(n % 10);
		}
	}
}

void ft_print(int n)
{
	if (n >= 1000)
	{
		handle_thousands(n);
	}
	else if (n >= 100)
	{
		handle_hundreds(n);
	}
	else if (n >= 20)
	{
		handle_tens(n);
	}
	else if (n >= 0)
	{
		print_number(n);
	}
}

int main(int ac, char **av)
{
	if (ac != 2)
	{
		write(1, "Error\n", 6);
		return 0;
	}
	int number = atoi(av[1]);
	if (number < 0)
	{
		write(1, "Error\n", 6);
		return 0;
	}
	ft_print(number);
	write(1, "\n", 1);
	return 0;
}
Leave a Comment