Advertisement
Guest User

Untitled

a guest
Feb 29th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define DimMax 1005
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("poarta.in");
  7. ofstream fout("poarta.out");
  8.  
  9. int c;
  10. int n;
  11. int v[DimMax];
  12. long long nrdalecalca, nrpicaturi;
  13. char ch;
  14.  
  15. int nrcif(int n)
  16. {
  17. int nr = 0;
  18. while(n > 0)
  19. {
  20. nr++;
  21. n /= 10;
  22. }
  23. return nr;
  24. }
  25.  
  26. bool Emaimare(int v[], int n)
  27. {
  28. if(v[0] > nrcif(n)) return true;
  29. else if(v[0] < nrcif(n)) return false;
  30. else
  31. {
  32. int nr = 0;
  33. for(int i = 1;i <= v[0];i++) nr = nr * 10 + v[i];
  34. if(nr > n) return true;
  35. else return false;
  36. }
  37. }
  38.  
  39. void Imparte(int x)
  40. {
  41. int rest = 0, val = 0;
  42. for(int i = 1;i <= v[0];i++)
  43. {
  44. val = rest * 10 + v[i];
  45. rest = val % x;
  46. v[i] = val / x;
  47. }
  48. reverse(v + 1,v + v[0] + 1);
  49. while(v[v[0]] == 0) v[0]--;
  50. reverse(v + 1,v + v[0] + 1);
  51. }
  52.  
  53. void Scade(int x)
  54. {
  55. int t = 0, val = 0;
  56. int a[DimMax];
  57. a[0] = 1; a[1] = 1;
  58. for(int i = 2;i <= v[0];i++) a[i] = 0;
  59. for(int i = 1;i <= v[0];i++)
  60. {
  61. val = v[i] - a[i] - t;
  62. if(val < 0)
  63. {
  64. val += 10;
  65. t = 1;
  66. }else t = 0;
  67. v[i] = val % 10;
  68. }
  69. while(v[v[0]] == 0) v[0]--;
  70. }
  71. int main()
  72. {
  73. fin>>c;
  74. fin>>n;
  75. while(fin>>ch)
  76. {
  77. v[++v[0]] = ch - '0';
  78. }
  79. nrdalecalca = 1;
  80. while(Emaimare(v, n))
  81. {
  82. if(v[0] <= 6)
  83. {
  84. int nr = 0;
  85. for(int i = 1;i <= v[0];i++) nr = nr * 10 + v[i];
  86. if(nr == n + 1)
  87. {
  88. nrdalecalca++;
  89. nrpicaturi++;
  90. break;
  91. }
  92. }
  93. if(v[v[0]] % 2 == 1)
  94. {
  95. reverse(v + 1,v + v[0] + 1);
  96. Scade(1);
  97. reverse(v + 1,v + v[0] + 1);
  98. nrdalecalca++;
  99. nrpicaturi++;
  100. }
  101. else
  102. {
  103. Imparte(2);
  104. nrdalecalca++;
  105. nrpicaturi += 2;
  106. }
  107. }
  108. if(c == 1)
  109. fout<<nrdalecalca;
  110. else fout<<nrpicaturi;
  111. return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement