Dennnhhhickk

Untitled

Nov 3rd, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. program zad_b;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. var
  9. i, j, ii, jj, p, cop, b10, k: integer;
  10. a, b, answer, q: string;
  11.  
  12. procedure chswap(var a, b: char);
  13. var
  14. x: char;
  15.  
  16. begin
  17. x := a;
  18. a := b;
  19. b := x;
  20. end;
  21.  
  22. function reverse(s: string): string;
  23. var
  24. i: integer;
  25.  
  26. begin
  27. for i := 1 to length(s) div 2 do
  28. chswap(s[i], s[length(s) - i + 1]);
  29. reverse := s;
  30. end;
  31.  
  32. function translateb(n, i: integer): string;
  33. var
  34. m, k, cnt: integer;
  35. s: string;
  36.  
  37. begin
  38. s := '';
  39. while (n <> 0) do
  40. begin
  41. s := s + inttostr(n mod i);
  42. n := n div i;
  43. end;
  44.  
  45. s := reverse(s);
  46. result := s;
  47. end;
  48.  
  49. function to10(s: string; ii: integer): int64;
  50. var
  51. i, j, k: integer;
  52. ans: int64;
  53. begin
  54. k := 0;
  55. ans := 0;
  56. for i := length(s) downto 1 do
  57. begin
  58. ans := ans + strtoint(s[i]) * trunc(exp(ln(ii) * k));
  59. inc(k);
  60. end;
  61.  
  62. to10 := ans;
  63. end;
  64.  
  65.  
  66.  
  67.  
  68. begin
  69. q := '';
  70. readln(ii, jj);
  71. readln(a);
  72. b := (translateb(jj, ii));
  73. b10 := to10(b, ii);
  74. answer := '';
  75.  
  76. i := 1;
  77. while (to10(a, ii) >= b10) do
  78. begin
  79. while (i <= length(a)) and (length(a) > 1) do
  80. begin
  81. cop := to10(copy(a, 1, i), ii);
  82. //writeln('cop = ', cop,' b10 = ', b10, ' ', to10(a, ii));
  83. if (cop >= b10) then
  84. begin
  85. p := to10(copy(a, 1, i), ii);
  86. answer := answer + translateb(p div jj, jj);
  87. if (a <> '') then
  88. delete(a, 1, i);
  89. i := 1;
  90. a := translateb(p mod jj, ii) + a;
  91. end
  92. else
  93. inc(i);
  94. end;
  95. q := a + q;
  96. a := answer;
  97. answer := '';
  98. i := 1;
  99. if (to10(a, ii) < b10) then
  100. break;
  101. end;
  102.  
  103. if (a <> '') then
  104. q := a + q;
  105.  
  106. writeln(q);
  107. readln;readln;readln;
  108.  
  109. end.
Advertisement
Add Comment
Please, Sign In to add comment