Advertisement
haunted_mind

IND4

Dec 8th, 2019
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.48 KB | None | 0 0
  1. #pragma hdrstop
  2. #pragma argsused
  3.  
  4. #ifdef _WIN32
  5. #include <tchar.h>
  6. #else
  7. typedef char _TCHAR;
  8. #define _tmain main
  9. #endif
  10.  
  11. #include <stdio.h>
  12. #include <iostream>
  13. #include <conio.h>
  14. #include <string>
  15. #include <math.h>
  16.  
  17. using namespace std;
  18.  
  19.  
  20.  
  21. int conwert12DigitIn10Nums(char a)
  22. {
  23. if (a=='A') {
  24. return 10;
  25. }
  26. if (a=='B') {
  27. return 11;
  28. }
  29. return (a-'0');
  30. }
  31.  
  32. void addOrSubInColumn(int*n1,int*n2,int * res, int length)
  33. {
  34. int point=0;
  35. for (int i = length-1; i >=0; i--) {
  36. res[i] = (n1[i]+n2[i] + 12+point)%12; // cout <<endl<<" res["<<i<<"] "<< res[i];
  37. point = (n1[i]+n2[i] + 12+point)/12-1;
  38. }
  39. }
  40.  
  41. char conwert10DigitIn12Nums(int a)
  42. {
  43. if (a==10) {
  44. return 'A';
  45. }
  46. if (a==11) {
  47. return 'B';
  48. }
  49. return char(a+'0');
  50. }
  51.  
  52. void convertToInt(char*num,int * n, int length)
  53. {
  54. for (int i = 0; i < length; i++) {
  55. n[i]=conwert12DigitIn10Nums(num[i]);
  56. //cout <<endl<<"n["<<i<<"] "<<n[i];
  57. }
  58. }
  59.  
  60. void inputNumInBase12(char*Num12)
  61. {
  62. cin.getline(Num12,19);
  63. cout << "u've entered "<< Num12<<endl;
  64. }
  65.  
  66. void convertToChar(int*n,char*n12,int length)
  67. {
  68. for (int i = 0; i < length; i++) {
  69. n12[i]= conwert10DigitIn12Nums(n[i]);
  70. }
  71. }
  72.  
  73. void minusOne(int*arr,int length)
  74. {
  75. for (int i = 0; i < length; i++) {
  76. arr[i]*=-1;
  77. }
  78. }
  79.  
  80. char add(int*bigger,char signb,int*lesser,char signl,int*res,int length)
  81. {
  82. if (((signb=='+')&&(signl=='+'))||((signb=='-')&&(signl=='-')))
  83. {
  84. addOrSubInColumn(bigger,lesser,res,length);
  85. //(signb=='+')? return'+':return'-';
  86. }
  87. /* if ((signb='-')&&(signb='-'))
  88. {
  89. addOrSubInColumn(bigger,lesser,res,length);
  90. return'-';
  91. } */
  92. else if (((signb=='-')&&(signl=='+'))||((signb=='+')&&(signl=='-')))
  93. {
  94. minusOne(lesser, length);
  95. addOrSubInColumn(bigger,lesser,res,length);
  96. minusOne(lesser, length);
  97. }
  98. if (signb=='+') {
  99. // cout <<endl<<endl<< "signb "<< signb <<endl<<endl;
  100. return'+';
  101. }
  102. else {
  103. // cout <<endl<<endl<< "signb "<< signb <<endl<<endl;
  104. return'-'; }
  105. //(signb=='+')? (signb=='+'):return'-';
  106. }
  107.  
  108. char sub(int*bigger,char signb,int*lesser,char signl,int*res,int length,bool is_replasement)
  109. {
  110. if (!is_replasement) {
  111. if (signl=='+') {
  112. signl='-';
  113. }
  114. else signl='+';
  115. }
  116. else {
  117. if (signb=='+') {
  118. signb='-';
  119. }
  120. else signb='+';
  121. }
  122. return add(bigger,signb,lesser,signl,res,length);
  123. }
  124.  
  125. int _tmain(int argc, _TCHAR* argv[])
  126. {
  127. cout << "This program adds and substracts two 12-base nums "<<endl;
  128. cout << "Enter two 12-base nums( they must be lesser or equal to 41A792678515120367), using digits and symbol 'A', 'B',and sign '+' or '-' before the numbers."<<endl;
  129. char num1[19]={'\0'};
  130. inputNumInBase12(num1);
  131. char num2[19]={'\0'};
  132. inputNumInBase12(num2);
  133. char sign11=num1[0];
  134. char sign2=num2[0];
  135. // cout <<endl<<endl<< "sign2 "<< sign2 <<endl<<endl;
  136. num1[0]='0';
  137. num2[0]='0';
  138. int addZeros = (strlen(num1)-strlen(num2));
  139. char*les = addZeros>0?num2:num1;
  140. int length = addZeros>0?strlen(num1):strlen(num2);// cout << length;
  141. for (int i = strlen(les); i >=0; i--)
  142. {
  143. les[i+abs(addZeros)]=les[i];
  144. }
  145. for (int i=0; i < abs(addZeros); i++) {
  146. les[i]='0';
  147. }
  148. int *n1=new int[length];
  149. int *n2=new int[length];
  150. convertToInt(num1,n1, length);
  151. convertToInt(num2,n2,length);
  152. //cout << endl<<"n12 "<<n12;
  153. //cout<<endl<<"num1 "<<num1;
  154. //cout<<endl<<"num2 "<<num2;
  155. int compare1to2= strcmp(num1,num2);
  156. int *bigger;
  157. int *lesser;
  158. char signb;
  159. char signl;
  160. bool is_replasement;
  161. if (compare1to2>=0)
  162. {
  163. bigger = n1;
  164. lesser = n2;
  165. signb= sign11;
  166. signl = sign2;
  167. is_replasement=false;
  168. }
  169. else{
  170. bigger = n2;
  171. lesser = n1;
  172. signb= sign2; //cout <<endl<<endl<< "signb "<< signb <<endl<<endl;
  173. signl = sign11;
  174. is_replasement=true;
  175. }
  176. char*addition = new char[length+1];
  177. int* addInInt= new int [length];
  178. addition[length]='\0';
  179. char signAdd=add(bigger,signb,lesser,signl,addInInt,length);
  180. //cout <<endl<<compare1to2;
  181. convertToChar(addInInt,addition,length);
  182. cout<<endl<<endl<<"(num1) + (num2) = "<<signAdd<<addition;
  183. char*substraction = new char[length+1];
  184. int* substractInInt= new int [length];
  185. substraction[length]='\0';
  186. char signSub=sub(bigger,signb,lesser,signl,substractInInt,length,is_replasement);
  187. //cout <<endl<<compare1to2;
  188. convertToChar(substractInInt,substraction,length);
  189. cout<<endl<<endl<<"(num1) - (num2) = "<<signSub<<substraction;
  190. delete []n1;
  191. delete []n2;
  192. delete []addition;
  193. delete []addInInt;
  194. delete []substraction;
  195. delete []substractInInt;
  196. getch();
  197. return 0;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement