Advertisement
Vadorequest

42 - j02 - ex06

Jul 19th, 2013
477
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.08 KB | None | 0 0
  1. /* *************************************************************************** */
  2. /*                                                                             */
  3. /*                                                         :::      ::::::::   */
  4. /*   ft_putnbr.c                                         :+:      :+:    :+:   */
  5. /*                                                     +:+ +:+         +:+     */
  6. /*   by: adhenain <ambroise.dhenain@gmail.com>       +#+  +:+       +#+        */
  7. /*                                                 +#+#+#+#+#+   +#+           */
  8. /*   Created: 2013/07/18 17:37:19 by adhenain           #+#    #+#             */
  9. /*   Updated: 2013/07/18 19:08:13 by adhenain          ###   ########.fr       */
  10. /*                                                                             */
  11. /* *************************************************************************** */
  12.  
  13. int     ft_putchar(char c);
  14.  
  15. int     ft_get_int_size(int nb)
  16. {
  17.     int size;
  18.  
  19.     if (nb < 0)
  20.     {
  21.         nb = nb * -1;
  22.     }
  23.     size = nb > 0 ? 0 : 1;
  24.     while (nb > 0)
  25.     {
  26.         nb /= 10;
  27.         size++;
  28.     }
  29.     return size;
  30. }
  31.  
  32. int     ft_get_first_char(int val, int size)
  33. {
  34.     int divider;
  35.     int increment;
  36.  
  37.     if (val == 0)
  38.     {
  39.         return 0;
  40.     }
  41.     divider = 1;
  42.     increment = 0;
  43.     while (increment < size - 1)
  44.     {
  45.         divider *= 10;
  46.         increment++;
  47.     }
  48.     return val / divider;
  49. }
  50.  
  51. void    ft_manage_negative(int *nb)
  52. {
  53.     if (*nb == -2147483648)
  54.     {
  55.         ft_putchar('-');
  56.         ft_putchar('2');
  57.         ft_putchar('1');
  58.         ft_putchar('4');
  59.         ft_putchar('7');
  60.         ft_putchar('4');
  61.         ft_putchar('8');
  62.         ft_putchar('3');
  63.         ft_putchar('6');
  64.         ft_putchar('4');
  65.         *nb = 8;
  66.     }
  67.     if (*nb < 0)
  68.     {
  69.         *nb *= -1;
  70.         ft_putchar('-');
  71.     }
  72. }
  73.  
  74. void    ft_putnbr(int nb)
  75. {
  76.     int size;
  77.     int fake_char;
  78.     int minus;
  79.     int i;
  80.  
  81.     ft_manage_negative(&nb);
  82.     size = ft_get_int_size(nb);
  83.     while (size > 0)
  84.     {
  85.         fake_char = ft_get_first_char(nb, size);
  86.         minus = fake_char;
  87.         i = size - 1;
  88.         while (i > 0)
  89.         {
  90.             minus *= 10;
  91.             i--;
  92.         }
  93.         minus = minus == 0 ? size * fake_char : minus;
  94.         nb -= minus;
  95.         ft_putchar(48 + fake_char);
  96.         size--;
  97.     }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement