Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. struct BigInteger {
  2. int sign;
  3. char number[100];
  4. };
  5.  
  6. void swap (struct BigInteger * a, struct BigInteger * b) {
  7. struct BigInteger temp;
  8. temp = *a;
  9. *a = *b;
  10. *b = temp;
  11. }
  12.  
  13. void swapstr(char * a, char * b) {
  14. char temp = *a;
  15. *a = *b;
  16. *b = temp;
  17. }
  18.  
  19. void reverse(char* str) {
  20. int i;
  21. for(i=0;i<strlen(str)/2;i++) swapstr(str+i,str+strlen(str)-1-i);
  22. }
  23.  
  24. struct BigInteger sum(struct BigInteger first, struct BigInteger second) {
  25. int i,j;
  26. if(strlen(first.number) < strlen(second.number)) swap(&first, &second);
  27. char newSum[100];
  28. reverse(first.number); reverse(second.number);
  29. if (first.sign == second.sign) {
  30. int nho = 0;
  31. for(i=0;i<strlen(second.number);i++) {
  32. int sum = first.number[i]-'0' + second.number[i]-'0';
  33. if (nho == 1) {
  34. sum++;
  35. nho = 0;
  36. }
  37. if (sum >= 10) {
  38. nho = 1;
  39. sum-=10;
  40. }
  41. newSum[i] = sum+'0';
  42. }
  43. if (strlen(first.number) == strlen(second.number))
  44. if (nho == 1) newSum[i] = '1';
  45. else {
  46. for(;i<strlen(first.number);i++) {
  47. newSum[i]=first.number[i];
  48. if (nho == 1) {
  49. newSum[i]++;
  50. nho = 0;;
  51. }
  52. }
  53. }
  54. reverse(newSum);
  55. struct BigInteger tong;
  56. if (first.sign == 0) tong.sign = 0;
  57. else tong.sign = 1;
  58. strcpy(tong.number, newSum);
  59. return tong;
  60. } else {
  61. if (strlen(first.number) == strlen(second.number)) {
  62. for(i=strlen(first.number)-1;i>=0;i--) {
  63. if (first.number[i] < second.number[i]) {
  64. swap(&first, &second);
  65. break;
  66. } else if(first.number[i] > second.number[i]) break;
  67. }
  68. }
  69. int nho = 0;
  70. for(i=0;i<strlen(second.number);i++) {
  71. int sum = first.number[i]-'0' - (second.number[i]-'0');
  72. if (nho == 1) {
  73. sum--;
  74. nho = 0;
  75. }
  76. if (sum < 0) {
  77. nho = 1;
  78. sum+=10;
  79. }
  80. newSum[i] = sum+'0';
  81. }
  82. if (strlen(first.number) > strlen(second.number))
  83. for(;i<strlen(first.number);i++) {
  84. newSum[i]=first.number[i];
  85. if (nho == 1) {
  86. newSum[i]--;
  87. nho = 0;
  88. }
  89. }
  90. reverse(newSum);
  91. struct BigInteger tong;
  92. if (first.sign == 1) tong.sign = 1;
  93. else tong.sign = 0;
  94. strcpy(tong.number, newSum);
  95. return tong;
  96. }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement