Advertisement
Guest User

Untitled

a guest
May 22nd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.68 KB | None | 0 0
  1. struct BigNumber diff(struct BigNumber m, struct BigNumber k)
  2. {
  3. int comp,i;
  4. struct BigNumber answ;
  5. if(m.sign==k.sign)
  6. {
  7. if(m.sign==0)
  8. {
  9. comp=compareAbs(m,k);
  10. if(comp==1)
  11. {
  12. answ=diff_maincase(m,k);
  13. if(answ.sign==1)
  14. {
  15. printf("-");
  16. }
  17. for(i=answ.length-1;i>-1;i--)
  18. {
  19. printf("%c",answ.value[i]);
  20. }
  21. return answ;
  22. }
  23. if(comp==-1)
  24. {
  25. answ=diff(k,m);
  26. answ.sign=1-answ.sign;
  27. if(answ.sign==1)
  28. {
  29. printf("-");
  30. }
  31. for(i=answ.length-1;i>-1;i--)
  32. {
  33. printf("%c",answ.value[i]);
  34. }
  35. return answ;
  36. }
  37. if(comp==0)
  38. {
  39. answ.sign=0;
  40. answ.length=1;
  41. answ.value[0]='0';
  42. if(answ.sign==1)
  43. {
  44. printf("-");
  45. }
  46. for(i=answ.length-1;i>-1;i--)
  47. {
  48. printf("%c",answ.value[i]);
  49. }
  50. return answ;
  51. }
  52. }
  53. if(m.sign==1)
  54. {
  55. m.sign=0;
  56. k.sign=0;
  57. answ=diff(m,k);
  58. answ.sign=1-answ.sign;
  59. return answ;
  60. }
  61. }
  62. if(m.sign!=k.sign)
  63. {
  64. if(m.sign==0)
  65. {
  66. k.sign=0;
  67. return sum(m,k);
  68. }
  69. if(m.sign==1)
  70. {
  71. m.sign=0;
  72. answ=sum(m,k);
  73. answ.sign=1-answ.sign;
  74. return answ;
  75. }
  76. }
  77. }
  78.  
  79. struct BigNumber diff_maincase(struct BigNumber m, struct BigNumber k)
  80. {
  81. int i,j,x=0,y;
  82. struct BigNumber answ;
  83. answ.sign=0;
  84. answ.length=0;
  85. for(i=0;i<k.length;i++)
  86. {
  87. y=m.value[i]-k.value[i]-x;
  88. if(y>=0)
  89. {
  90. answ.value[i]='0'+y;
  91. }
  92. else
  93. {
  94. x=1;
  95. answ.value[i]='0'+10-y;
  96. }
  97. printf("%c ",answ.value[i]);
  98. }
  99. for(i=k.length-1,j=0;i>=0;i--,j++)
  100. {
  101. if(answ.value[i]!='0')
  102. {
  103. break;
  104. }
  105. }
  106. if(i<=0)
  107. {
  108. answ.length=1;
  109. }
  110. answ.length=m.length-j;
  111. return answ;
  112. }
  113.  
  114. struct BigNumber sum(struct BigNumber m, struct BigNumber k)
  115. {
  116. int comp;
  117. struct BigNumber answ;
  118. if(m.sign==k.sign)
  119. {
  120. if(m.sign==0)
  121. {
  122. comp=compareAbs(m,k);
  123. if(comp==1)
  124. {
  125. return sum_maincase(m,k);
  126. }
  127. if(comp==-1)
  128. {
  129. return sum_maincase(k,m);
  130. }
  131. if(comp==0)
  132. {
  133. return sum_maincase(m,k);
  134. }
  135. }
  136. if(m.sign==1)
  137. {
  138. m.sign=0;
  139. k.sign=0;
  140. answ=sum(m,k);
  141. answ.sign=1-answ.sign;
  142. return answ;
  143. }
  144. }
  145. if(m.sign!=k.sign)
  146. {
  147. k.sign=1-k.sign;
  148. return diff(m,k);
  149. }
  150. }
  151.  
  152. struct BigNumber sum_maincase(struct BigNumber m, struct BigNumber k)
  153. {
  154. int i,x=0;
  155. struct BigNumber answ;
  156. answ.sign=0;
  157. answ.length=0;
  158. for(i=0;i<k.length;i++)
  159. {
  160. if(-'0'+m.value[i]+k.value[i]+x<='9')
  161. {
  162. answ.value[i]='0'+m.value[i]-'0'+k.value[i]-'0'+x;
  163. x=0;
  164. }
  165. else
  166. {
  167. answ.value[i]=-'0'+m.value[i]+k.value[i]+x-10;
  168. x=1;
  169. }
  170. }
  171. answ.length=m.length;
  172. if(x!=0)
  173. {
  174. answ.value[i]='1';
  175. answ.length++;
  176. }
  177. return answ;
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement