Advertisement
levartolona

C_PRG_LANG_EX_3.4

Jan 31st, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <limits.h>
  5.  
  6. void numb_shift(char *str)
  7. {
  8.     int len = strlen(str);
  9.     str[0] = '1';
  10.  
  11.     for(int i = 1; i <= len; i++)
  12.         str[i] = '0';
  13.  
  14.     str[len + 1] = '\0';
  15.  
  16.     return;
  17. }
  18.  
  19. void sign_append(char *str)
  20. {
  21.     char cpy[256];
  22.     cpy[0] = '-';
  23.     for(int i = 1, j = 0; (cpy[i] = str[j]); i++, j++)
  24.         ;
  25.  
  26.     return;
  27. }
  28.  
  29. void my_itoa(int numb, char *str)
  30. {
  31.     int pos = 0;
  32.     int sign = numb < 0 ? 1 : 0;
  33.  
  34.     if (numb < 0)
  35.     {
  36.         if (numb == INT_MIN)
  37.             numb = INT_MAX;
  38.         else
  39.             numb = -(numb + 1);
  40.     }
  41.  
  42.     while (numb)
  43.     {
  44.         str[pos++] = (numb % 10) + '0';
  45.         numb /= 10;
  46.     }
  47.     str[pos] = '\0';
  48.  
  49.     int st_len = strlen(str);
  50.     for(int i = st_len - 1, j = 0; i > j; i--, j++)
  51.     {
  52.         char tmp = str[i];
  53.         str[i] = str[j];
  54.         str[j] = tmp;
  55.     }
  56.  
  57.     if (!sign)
  58.         return;
  59.  
  60.     int flg_transfer = 0;  // Number transfer (69 + 1, etc.)
  61.     for (pos = st_len - 1; pos >= 0; pos--)
  62.     {
  63.         flg_transfer = 0;
  64.         if (str[pos] == '9')
  65.         {
  66.             str[pos] = '0';
  67.             flg_transfer++;
  68.         }
  69.         else
  70.         {
  71.             str[pos] += 1;
  72.             break;
  73.         }
  74.     }
  75.  
  76.     if (pos < 0)
  77.         numb_shift(str);
  78.  
  79.     sign_append(str);
  80.  
  81.     return;
  82. }
  83.  
  84. int main(void)
  85. {
  86.     int numb;
  87.     char str_n[256];
  88.  
  89.     numb = INT_MAX;
  90.     my_itoa(numb, str_n);
  91.     printf("%s\n", str_n);
  92.  
  93.     numb = INT_MIN;
  94.     my_itoa(numb, str_n);
  95.     printf("%s\n", str_n);
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement