Guest User

Untitled

a guest
Dec 13th, 2018
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. char *ft_strnew(size_t size)
  2. {
  3. char *temp;
  4. size_t i;
  5.  
  6. if (!(temp = (char*)malloc(sizeof(char) * (size + 1))))
  7. return (NULL);
  8. i = 0;
  9. while (i < size)
  10. {
  11. temp[i] = '';
  12. i++;
  13. }
  14. temp[i] = '';
  15. return (temp);
  16. }
  17.  
  18. char *ft_strjoin(char const *s1, char const *s2)
  19. {
  20. char *temp;
  21. int i;
  22. int j;
  23.  
  24. if (!(temp = (char*)malloc(sizeof(char) *
  25. (ft_strlen(s1) + ft_strlen(s2) + 1))))
  26. return (NULL);
  27. i = 0;
  28. j = 0;
  29. while (s1[i])
  30. {
  31. temp[j] = s1[i];
  32. i++;
  33. j++;
  34. }
  35. i = 0;
  36. while (s2[i])
  37. {
  38. temp[j] = s2[i];
  39. i++;
  40. j++;
  41. }
  42. temp[j] = '';
  43. return (temp);
  44. }
  45.  
  46. int left_one(int *i, char c)
  47. {
  48. if (--(*i) < 0)
  49. return (0);
  50. else
  51. return (c - '0');
  52. }
  53.  
  54. char *add_char(char *nbr1, char *nbr2)
  55. {
  56. int i;
  57. int j;
  58. int left[4];
  59. char *temp;
  60.  
  61. left[0] = 0;
  62. temp = ft_strnew(0);
  63. i = ft_strlen(nbr1);
  64. j = ft_strlen(nbr2);
  65. if (i > j)
  66. left[3] = i;
  67. else
  68. left[3] = j;
  69. while (--left[3] >= 0)
  70. {
  71. left[1] = left_one(&i, nbr1[i - 1]);
  72. left[2] = left_one(&j, nbr2[j - 1]);
  73. left[0] += left[1] + left[2];
  74. temp = ft_charjoin((left[0] % 10) + '0', temp, 'l');
  75. left[0] /= 10;
  76. }
  77. if (left[0] > 0)
  78. temp = ft_charjoin((left[0] % 10) + '0', temp, 'l');
  79. return (temp);
  80. }
  81.  
  82. char *multi1_char(char *nbr1, int nbr2)
  83. {
  84. int i;
  85. char *temp;
  86.  
  87. if (nbr1[0] == '0' || nbr2 == 0)
  88. return ("0");
  89. i = -1;
  90. temp = ft_strdup(nbr1);
  91. while (++i < nbr2 - 1)
  92. temp = add_char(temp, nbr1);
  93. return (temp);
  94. }
  95.  
  96. char *multi_char(char *nbr1, char *nbr2)
  97. {
  98. int i;
  99. char *temp;
  100. int j;
  101. char *temp1;
  102. int t;
  103. char *mul;
  104.  
  105. mul = ft_strnew(0);
  106. temp = ft_strnew(1);
  107. j = 0;
  108. i = ft_strlen(nbr2);
  109. while (--i >= 0)
  110. {
  111. t = -1;
  112. temp1 = multi1_char(nbr1, nbr2[i] - '0');
  113. //temp1 = multi1_char(temp1, 10*j);
  114. /*while (++t < j)
  115. temp1 = ft_strjoin(temp1, "0");*/
  116. temp1 = ft_strjoin(temp1, mul);
  117. temp = add_char(temp, temp1);
  118. mul = ft_strjoin("0", mul);
  119. j++;
  120. }
  121. return (temp);
  122. }
  123.  
  124. char *power_char(int nbr1, int nbr2)
  125. {
  126. char *temp;
  127.  
  128. temp = ft_strnew(0);
  129. if (nbr2 == 1)
  130. return (ft_itoa(nbr1));
  131. if (nbr2 % 2 == 0)
  132. {
  133. temp = power_char(nbr1, nbr2 / 2);
  134. return (multi_char(temp, temp));
  135. }
  136. else
  137. {
  138. nbr2 -= 1;
  139. temp = power_char(nbr1, nbr2 / 2);
  140. return(multi_char(ft_itoa(nbr1), multi_char(temp, temp)));
  141. }
  142. }
Add Comment
Please, Sign In to add comment