fork download
  1. #include <stdio.h>
  2.  
  3. #define LEN 100
  4.  
  5. void sum(int *buff1, int len1, int *buff2, int len2, int *result, int *result_length) {
  6. int carry = 0;
  7. int i = len1 - 1;
  8. int j = len2 - 1;
  9. int k = 0;
  10.  
  11. while (i >= 0 || j >= 0 || carry) {
  12. int digit1 = (i >= 0) ? buff1[i] : 0;
  13. int digit2 = (j >= 0) ? buff2[j] : 0;
  14. int sum = digit1 + digit2 + carry;
  15.  
  16. result[k] = sum % 10;
  17. carry = sum / 10;
  18.  
  19. i--;
  20. j--;
  21. k++;
  22. }
  23.  
  24. *result_length = k;
  25.  
  26. for (int l = 0; l < k / 2; l++) {
  27. int temp = result[l];
  28. result[l] = result[k - 1 - l];
  29. result[k - 1 - l] = temp;
  30. }
  31. }
  32.  
  33. int compare(int *buff1, int len1, int *buff2, int len2) {
  34. if (len1 > len2) {
  35. return 1;
  36. } else if (len1 < len2) {
  37. return -1;
  38. } else {
  39. for (int i = 0; i < len1; i++) {
  40. if (buff1[i] > buff2[i]) {
  41. return 1;
  42. } else if (buff1[i] < buff2[i]) {
  43. return -1;
  44. }
  45. }
  46. return 0;
  47. }
  48. }
  49.  
  50. void sub(int *buff1, int len1, int *buff2, int len2, int *result, int *result_length) {
  51. int comparison = compare(buff1, len1, buff2, len2);
  52. if (comparison < 0) {
  53. printf("n/a\n");
  54. *result_length = 0;
  55. return;
  56. }
  57.  
  58. int borrow = 0;
  59. int i = len1 - 1;
  60. int j = len2 - 1;
  61. int k = 0;
  62.  
  63. while (i >= 0) {
  64. int digit1 = buff1[i];
  65. int digit2 = (j >= 0) ? buff2[j] : 0;
  66. int diff = digit1 - digit2 - borrow;
  67.  
  68. if (diff < 0) {
  69. diff += 10;
  70. borrow = 1;
  71. } else {
  72. borrow = 0;
  73. }
  74.  
  75. result[k] = diff;
  76. i--;
  77. j--;
  78. k++;
  79. }
  80.  
  81. *result_length = k;
  82.  
  83. while (*result_length > 1 && result[*result_length - 1] == 0) {
  84. (*result_length)--;
  85. }
  86.  
  87. for (int l = 0; l < k / 2; l++) {
  88. int temp = result[l];
  89. result[l] = result[k - 1 - l];
  90. result[k - 1 - l] = temp;
  91. }
  92. }
  93.  
  94. int main() {
  95. int buff1[LEN], buff2[LEN], result_sum[LEN], result_sub[LEN];
  96. int len1 = 0, len2 = 0, result_sum_length = 0, result_sub_length = 0;
  97. int num;
  98.  
  99. while (scanf("%d", &num) == 1) {
  100. if (num < 0 || num > 9) {
  101. printf("n/a\n");
  102. return 1;
  103. }
  104. buff1[len1++] = num;
  105. if (len1 > LEN) {
  106. printf("n/a\n");
  107. return 1;
  108. }
  109.  
  110. char c = getchar();
  111. if (c == '\\n') {
  112. break;
  113. }
  114. }
  115.  
  116. while (scanf("%d", &num) == 1) {
  117. if (num < 0 || num > 9) {
  118. printf("n/a\n");
  119. return 1;
  120. }
  121. buff2[len2++] = num;
  122. if (len2 > LEN) {
  123. printf("n/a\n");
  124. return 1;
  125. }
  126. }
  127.  
  128. sum(buff1, len1, buff2, len2, result_sum, &result_sum_length);
  129. if (result_sum_length > 0) {
  130. for (int i = 0; i < result_sum_length; i++) {
  131. printf("%d ", result_sum[i]);
  132. }
  133. printf("\n");
  134. } else {
  135. printf("n/a\n");
  136. }
  137.  
  138. sub(buff1, len1, buff2, len2, result_sub, &result_sub_length);
  139. if (result_sub_length > 0) {
  140. for (int i = 0; i < result_sub_length; i++) {
  141. printf("%d ", result_sub[i]);
  142. }
  143. printf("\n");
  144. }
  145.  
  146. return 0;
  147. }
Success #stdin #stdout 0.01s 5284KB
stdin
1 9 4 4 6 7 4 4 0 7 3 7 0 9 5 5 1 6 1
2 9
stdout
194467440737095516129\n194467440737095516129\n