fork(4) download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.  
  9.  
  10. string linia;
  11. int piatki;
  12.  
  13. cin >> linia >> piatki;
  14.  
  15.  
  16. int dlugosc = linia.length();
  17.  
  18. if (piatki > dlugosc)
  19. {
  20.  
  21. for (int i = 0; i < piatki; i++)
  22. {
  23.  
  24. cout << "5";
  25. }
  26. }
  27.  
  28.  
  29. long long liczba = stoll(linia);
  30. string test;
  31. long long liczba_test;
  32.  
  33. for (int i = 0; i < dlugosc; i++)
  34. {
  35.  
  36. test[i] = '5';
  37. }
  38.  
  39. liczba_test = stoll(test);
  40.  
  41.  
  42. if (piatki == dlugosc && liczba < liczba_test)
  43. {
  44.  
  45. for (int i = 0; i < piatki; i++)
  46. {
  47.  
  48. cout << "5";
  49. }
  50. }
  51.  
  52.  
  53. if (piatki == dlugosc && liczba >= liczba_test)
  54. {
  55.  
  56. cout << "1";
  57.  
  58. for (int i = 0; i < piatki; i++)
  59. {
  60.  
  61. cout << "5";
  62. }
  63. }
  64.  
  65.  
  66. if (piatki < dlugosc)
  67. {
  68.  
  69. int nr = 0;
  70. int ile_piatek = 0;
  71.  
  72. if (linia[dlugosc - 1] == '9')
  73. {
  74.  
  75. while (linia[dlugosc - 1 - nr] == '9')
  76. {
  77. linia[dlugosc - 1 - nr] = '0';
  78. if ((dlugosc - 1 - nr) != 0)
  79. nr++;
  80. }
  81. if ((dlugosc - 1 - nr) != 0 || (linia[dlugosc - 1 - nr] < '9' && linia[dlugosc - 1 - nr] != '0'))
  82. linia[dlugosc - 1 - nr] += 1;
  83. }
  84. else
  85. linia[dlugosc - 1] += 1;
  86.  
  87.  
  88. for (int i = 0; i < dlugosc; i++)
  89. {
  90. if (linia[i] == '5')
  91. ile_piatek++;
  92. }
  93.  
  94. if (ile_piatek >= piatki)
  95. cout << linia;
  96.  
  97. else
  98. {
  99.  
  100. ile_piatek = 0;
  101. bool trt = true;
  102. bool zmiana = true;
  103.  
  104. while (ile_piatek != piatki)
  105. {
  106.  
  107. int do_sprawdzenia = dlugosc - piatki;
  108. ile_piatek = 0;
  109. int numer = 0;
  110.  
  111. while (do_sprawdzenia)
  112. {
  113.  
  114. ile_piatek = 0;
  115.  
  116. for (int i = 0; i < do_sprawdzenia; i++)
  117. {
  118.  
  119. if (linia[i] == '5')
  120. ile_piatek++;
  121. }
  122. if (numer == ile_piatek)
  123. break;
  124. else
  125. {
  126.  
  127. do_sprawdzenia += ile_piatek - numer;
  128. numer = ile_piatek;
  129. }
  130. }
  131.  
  132. int nowe_piatki = piatki - ile_piatek;
  133.  
  134. if (linia[dlugosc - nowe_piatki] >= '5')
  135. {
  136.  
  137. nr = 0;
  138.  
  139. while (linia[dlugosc - nowe_piatki - nr - 1] == '9')
  140. {
  141.  
  142. linia[dlugosc - nowe_piatki - nr - 1] = '0';
  143. if ((dlugosc - nowe_piatki - nr - 1) != 0)
  144. nr++;
  145. }
  146.  
  147. if (((dlugosc - nowe_piatki - nr - 1) != 0) || (linia[dlugosc - nowe_piatki - nr - 1] < '9' && linia[dlugosc - nowe_piatki - nr - 1] != '0'))
  148. linia[dlugosc - nowe_piatki - nr - 1] += 1;
  149. }
  150.  
  151.  
  152.  
  153. int ilosc = 0;
  154. ile_piatek = 0;
  155. for (int i = 0; i < dlugosc; i++)
  156. {
  157.  
  158. if (linia[i] == '5')
  159. ile_piatek++;
  160. }
  161.  
  162. if (ile_piatek == piatki)
  163. {
  164.  
  165. int nm = 0;
  166.  
  167. while (ilosc != piatki)
  168. {
  169.  
  170. if (linia[nm] == '5')
  171. {
  172. ilosc++;
  173. }
  174.  
  175. cout << linia[nm];
  176. nm++;
  177. }
  178.  
  179. for (int i = nm; i < dlugosc; i++)
  180. {
  181. cout << "0";
  182. }
  183. cout << endl;
  184. trt = false;
  185. break;
  186. }
  187.  
  188.  
  189. for (int i = 0; i < nowe_piatki; i++)
  190. {
  191.  
  192. linia[dlugosc - 1 - i] = '5';
  193. }
  194.  
  195.  
  196. ile_piatek = 0;
  197.  
  198. for (int i = 0; i < dlugosc; i++)
  199. {
  200. if (linia[i] == '5')
  201. ile_piatek++;
  202. }
  203.  
  204.  
  205. if (ile_piatek > piatki)
  206. {
  207.  
  208. int usun = ile_piatek - piatki;
  209. int cyt = 0;
  210.  
  211. while (linia[dlugosc - piatki + cyt] != '5')
  212. {
  213. usun++;
  214. cyt++;
  215. }
  216.  
  217. for (int i = 0; i < usun; i++)
  218. {
  219. linia[dlugosc - piatki + i] = '0';
  220. }
  221. }
  222.  
  223. ile_piatek = 0;
  224.  
  225. for (int i = 0; i < dlugosc; i++)
  226. {
  227. if (linia[i] == '5')
  228. ile_piatek++;
  229. }
  230. }
  231.  
  232. if (linia[0] == '0')
  233. cout << "1";
  234. if (trt == true)
  235. cout << linia;
  236. }
  237. }
  238.  
  239. return 0;
  240. }
  241.  
Success #stdin #stdout 0.01s 5496KB
stdin
9559995559595 8
stdout
9559995565555