Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. import java.math.BigInteger;
  2. import java.util.Scanner;
  3.  
  4. public class Main{
  5.  
  6. public static void main(String[] args) {
  7. Scanner scanner = new Scanner(System.in);
  8. String A = scanner.nextLine();
  9. String[] aTab = A.split(" ");
  10. String N = scanner.nextLine();
  11. String[] nTab = N.split(" ");
  12. int nLegnth;
  13. int nPodstawa = 0;
  14. int mLength = 0;
  15. int cLength = 0;
  16. int a = 0;
  17. int nTabLength;
  18. int[] nTabNumber = null;
  19. try{
  20. int nLength = Integer.parseInt(aTab[0]);
  21. if(nLength < 1 || nLength > Math.pow(10, 7)){
  22. System.exit(0);
  23. }
  24. nPodstawa = Integer.parseInt(aTab[1]);
  25. if(nPodstawa < 3 || nPodstawa > Math.pow(10, 9)){
  26. System.exit(0);
  27. }
  28. mLength = Integer.parseInt(aTab[2]);
  29. if(mLength < 2 || mLength > Math.pow(10, 3)){
  30. System.exit(0);
  31. }
  32. cLength = Integer.parseInt(aTab[3]);
  33. if(cLength < 2 || cLength > Math.pow(10, 3)){
  34. System.exit(0);
  35. }
  36. nTabLength = nTab.length;
  37. nTabNumber = new int[nTabLength];
  38. a = nTabLength - 1;
  39. }catch(NumberFormatException ex){
  40. System.exit(0);
  41. }
  42. while (a >= 0) {
  43. nTabNumber[a] = Integer.parseInt(nTab[a]);
  44. a = a - 1;
  45. }
  46. int nTabNumberLength = nTabNumber.length;
  47. while(nTabNumberLength > 0 ){
  48. if(nTabNumber[nTabNumberLength-1] < 0 || nTabNumber[nTabNumberLength-1] > nPodstawa-1){
  49. System.exit(0);
  50. }
  51. nTabNumberLength--;
  52. }
  53. for(int z : nTabNumber){
  54. if(z < 0 || z > (nPodstawa)){
  55. System.exit(0);
  56. }
  57. }
  58. BigInteger big = new BigInteger("0");
  59. int c = 0;
  60.  
  61. BigInteger BiNPodstawa = new BigInteger(aTab[1]);
  62. while (c < nTab.length) {
  63. BigInteger BiNtabNum = new BigInteger(nTab[nTab.length - c - 1]);
  64. BigInteger BiPowSum = BiNPodstawa.pow(c);
  65. BigInteger BiMultiplySum = BiNtabNum.multiply(BiPowSum);
  66. big = big.add(BiMultiplySum);
  67. c++;
  68. }
  69. String bigToString = big.toString();
  70. BigInteger bi = new BigInteger(bigToString);
  71. String binarySum = bi.toString(2);
  72.  
  73. int binarySumLength = binarySum.length();
  74. String[] binTab = binarySum.split("");
  75. for (int i = 0; i < binTab.length; i++) {
  76. }
  77. StringBuilder sb = new StringBuilder();
  78. for (int i = 0; i < nTab.length; i++) {
  79. sb.append(nTab[i]);
  80. }
  81. String afterSb = sb.toString();
  82. BigInteger aNum = new BigInteger(afterSb);
  83. int znak = 0;
  84. String compareStr = "0";
  85. BigInteger compareBi = new BigInteger(compareStr);
  86. znak = 0;
  87. if (aNum.compareTo(compareBi) == -1) {
  88. znak = 1;
  89. }
  90.  
  91. StringBuilder sbMantysa = new StringBuilder();
  92. sbMantysa.append(znak);
  93. long dlugoscMantysy = mLength - 1;
  94. if(mLength <= binTab.length){
  95. for(int i = 0; i <dlugoscMantysy; i++){
  96. sbMantysa.append(binTab[i]);
  97. }
  98. }else if(mLength > binTab.length){
  99. for(int i =0; i<binTab.length; i++){
  100. sbMantysa.append(binTab[i]);
  101. }
  102. int d = sbMantysa.length();
  103. while(d < mLength){
  104. sbMantysa.append(0);
  105. d++;
  106. }
  107. }
  108. String mantysaStr = sbMantysa.toString();
  109. BigInteger closeNBi = new BigInteger(mantysaStr, 2);
  110. closeNBi = closeNBi.shiftLeft(1);
  111. String closeN = closeNBi.toString(2);
  112. int closeNLength = closeN.length();
  113. StringBuilder closeNbuilder = new StringBuilder();
  114. closeNbuilder.append(closeN);
  115. if(closeNLength < binarySumLength){
  116. int y = closeNLength;
  117. while(y != binarySumLength){
  118. closeNbuilder.append(0);
  119. y++;
  120. }
  121. }
  122. String closeNfinale = closeNbuilder.toString();
  123. BigInteger BiCloseFinale = new BigInteger(closeNfinale, 2);
  124. BigInteger mantysaFinale = new BigInteger(mantysaStr, 2);
  125. BigInteger dividingResult = BiCloseFinale.divide(mantysaFinale);
  126. String dwa = "2";
  127. String jeden = "1";
  128. BigInteger two = new BigInteger(dwa);
  129. BigInteger one = new BigInteger(jeden);
  130. int divingResult1 = 0;
  131. int cecha = 0;
  132. int compare = 1;
  133.  
  134. BigInteger temp = dividingResult;
  135. while(compare != 0){
  136. BigInteger res = temp.divide(two);
  137. temp = res;
  138. compare = temp.compareTo(one);
  139. cecha++;
  140. }
  141. String cechaStr = Integer.toString(cecha);
  142. BigInteger biCecha = new BigInteger(cechaStr);
  143. String cechaFinale = biCecha.toString(2);
  144. int cechaFinaleLength = cechaFinale.length();
  145. StringBuilder cechaBuilder = new StringBuilder();
  146. if(cechaFinaleLength < cLength){
  147. int z = cechaFinaleLength;
  148. while(z != cLength){
  149. cechaBuilder.append(0);
  150. z++;
  151. }
  152. cechaBuilder.append(cechaFinale);
  153. }else if(cechaFinaleLength > cLength){
  154. String[] cechaTab = cechaFinale.split("");
  155. int z = 0;
  156. while(z < cLength){
  157. cechaBuilder.append(cechaTab[z]);
  158. z++;
  159. }
  160. }
  161. String cechaFinaleStr = cechaBuilder.toString();
  162. String[] cechaTab = cechaFinaleStr.split("");
  163. StringBuilder cechaFinaleBuilder = new StringBuilder();
  164. if(mLength > binTab.length){
  165. int h =0;
  166. while(h < cechaTab.length){
  167. if(cechaTab[h].equals("0")){
  168. cechaTab[h] = "1";
  169. }else if(cechaTab[h].equals("1")){
  170. cechaTab[h]="0";
  171. }
  172. h++;
  173. }
  174. for(int i=0; i<cechaTab.length; i++){
  175. cechaFinaleBuilder.append(cechaTab[i]);
  176. }
  177. cechaFinaleStr = cechaFinaleBuilder.toString();
  178. }
  179. System.out.println(mantysaStr);
  180. System.out.println(cechaFinaleStr);
  181. }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement