Advertisement
Guest User

Untitled

a guest
May 19th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. int add(const char* number1, const char* number2, char** result)
  2. {
  3. if (number1 == NULL || number2 == NULL || result == NULL) return 1;
  4. if (validate(number1) == 2 || validate(number2) == 2) return 2;
  5. int dl1 = strlen(number1), dl2 = strlen(number2),dlmax;
  6. if (dl1 >= dl2) dlmax = dl1;
  7. else dlmax = dl2;
  8. dlmax += 3;//ewentualne znaki
  9. if (*number1 == '-' && *number2 != '-')
  10. return subtract(number2, number1 + 1, result);
  11. if (*number1 != '-' && *number2 == '-')
  12. return subtract(number1, number2 + 1, result);
  13. *result = (char*)malloc(dlmax * sizeof(char));
  14. if (*result == NULL)
  15. return 3;
  16.  
  17. if (*number1 == '-' && *number2 == '-')
  18. {
  19. int carry = 0, digit1, digit2, i;
  20. for (i = 0; i < dlmax - 1; i++)
  21. {
  22. /*wylaczenie liczby*/
  23. if (dl1 - 1 - i <= 0) digit1 = 0;
  24. else digit1 = *(number1 + dl1 - 1 - i) - '0';
  25. if (dl2 - 1 - i <= 0) digit2 = 0;
  26. else digit2 = *(number2 + dl2 - 1 - i) - '0';
  27. if (dl1 - 1 - i <= 0 && dl2 - 1 - i <= 0 && carry == 0)
  28. break;
  29. dodanie(digit1, digit2, &carry, result,i);
  30. }
  31. *(*result + i) = '-';
  32. *(*result + i + 1) = '\0';
  33. rev(*result);
  34. return 0;
  35. }
  36. if (*number1 != '-' && *number2 != '-')
  37. {
  38. int carry = 0, digit1, digit2, i;
  39. for (i = 0; i < dlmax - 1; i++)
  40. {
  41. /*wylaczenie liczby*/
  42. if (dl1 - 1 - i < 0) digit1 = 0;
  43. else digit1 = *(number1 + dl1 - 1 - i) - '0';
  44. if (dl2 - 1 - i < 0) digit2 = 0;
  45. else digit2 = *(number2 + dl2 - 1 - i) - '0';
  46. if (dl1 - 1 - i < 0 && dl2 - 1 - i < 0 && carry == 0)break;
  47. dodanie(digit1, digit2, &carry, result, i);
  48. }
  49. *(*result + i) = '\0';
  50. rev(*result);
  51. return 0;
  52. }
  53. return 0;
  54. }
  55. void dodanie(int digit1, int digit2, int *carry, char** result,int i)
  56. {
  57. if (digit1 + digit2 + *carry >= 10)
  58. {
  59. *(*result + i) = (digit2 + digit1 + *carry) % 10 + '0';
  60. *carry = 1;
  61. }
  62. else
  63. {
  64. *(*result + i) = (digit2 + digit1 + *carry) % 10 + '0';
  65. *carry = 0;
  66. }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement