fork(1) download
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. #include<cstring>
  5. #include<string>
  6. #include<algorithm>
  7. using namespace std;
  8. string multipication(string x, string y);
  9. string addition(string x4, string y4);
  10. void divide(string x, int n);
  11. int m1;
  12. int main()
  13. {
  14. int i,p,j,x,q,k;
  15. char rol;
  16. string y, ma, m, n;
  17. vector<int>v;
  18. int taken[11];
  19. while (cin>>n>>m)
  20. {
  21. if (n == "0"&& m == "0")
  22. break;
  23. y = n;
  24. memset(taken, 0, sizeof(taken));
  25. ma = "1";
  26. for (k = 1; ; k++)
  27. {
  28. if (n == "0")
  29. break;
  30. if (m == "0")
  31. break;
  32. if (m == "1")
  33. break;
  34. ma = multipication(y, ma);
  35. if (taken[ma[ma.size() - 1] - '0'] == 0)
  36. {
  37. v.push_back(ma[ma.size() - 1] - '0');
  38. taken[ma[ma.size() - 1] - '0'] = 1;
  39.  
  40. }
  41. else
  42. break;
  43. }
  44. if (n == "0")
  45. cout << 0 << "\n";
  46. else if (m == "0")
  47. cout << 1 << "\n";
  48. else if (m == "1")
  49. cout << n << "\n";
  50. else
  51. {
  52. divide(m, v.size());
  53. if (m1 == 0)
  54. cout << v[v.size() - 1] << "\n";
  55. else
  56. cout << v[m1 - 1] << "\n";
  57. }
  58. v.clear();
  59.  
  60.  
  61. }
  62. }
  63. string multipication(string x, string y)
  64. {
  65. string z, m1, pa, pa1, ka;
  66. int i, j, m, p, check;
  67. char c;
  68. if (x.size() > y.size())
  69. swap(x, y);
  70. pa = "";
  71. m1 = "";
  72. check = 0;
  73. for (i = x.size() - 1; i >= 0; i--)
  74. {
  75. z = "", p = 0;
  76. for (j = y.size() - 1; j >= 0; j--)
  77. {
  78. m = (y[j] - '0')*(x[i] - '0') + p;
  79. p = 0;
  80. p = (m / 10);
  81.  
  82. c = (m % 10) + '0';
  83. z = z + c;
  84. }
  85.  
  86. if (m >= 10)
  87. {
  88. c = ((m / 10) + '0');
  89. z = z + c;
  90. }
  91.  
  92. reverse(z.begin(), z.end());
  93. z = z + m1;
  94. m1 = m1 + '0';
  95. pa = addition(pa, z);
  96.  
  97. }
  98. int ma = 0;
  99. for (i = 0; i < pa.size(); i++)
  100. {
  101. if (pa[i] != '0')
  102. ma = 1;
  103. if (ma == 1)
  104. {
  105. ka = ka + pa[i];
  106. }
  107. }
  108. return ka;
  109. }
  110.  
  111. string addition(string x4, string y4)
  112. {
  113. string z, z1;
  114. z = "";
  115. z1 = "";
  116. long long i, sum, p;
  117. char c;
  118. if (y4.size()<x4.size())
  119. {
  120. for (i = 0; i<(x4.size() - y4.size()); i++)
  121. {
  122. z = z + '0';
  123. }
  124. z = z + y4;
  125. y4 = z;
  126. }
  127. else if (x4.size()<y4.size())
  128. {
  129. for (i = 0; i<(y4.size() - x4.size()); i++)
  130. {
  131. z = z + '0';
  132. }
  133. z = z + x4;
  134. x4 = z;
  135. }
  136. p = 0;
  137. for (i = x4.size() - 1; i >= 0; i--)
  138. {
  139. sum = p + (x4[i] - '0') + (y4[i] - '0');
  140. p = 0;
  141. if (sum >= 10)
  142. p = 1;
  143. c = ((sum % 10) + '0');
  144. z1 = z1 + c;
  145. }
  146. if (sum >= 10)
  147. z1 = z1 + "1";
  148. reverse(z1.begin(), z1.end());
  149. return z1;
  150. }
  151. void divide(string x, int n)
  152. {
  153.  
  154.  
  155. int i;
  156. m1 = 0;
  157. for (i = 0; i < x.size(); i++)
  158. {
  159.  
  160. if (m1 < n)
  161. m1 = m1 * 10 + (x[i]-'0');
  162. if (m1 >= n)
  163. {
  164. if (m1%n != 0)
  165. {
  166. m1 = (m1%n);
  167.  
  168. }
  169. if (m1%n == 0)
  170. m1 = 0;
  171.  
  172. }
  173.  
  174. }
  175.  
  176.  
  177. }
Success #stdin #stdout 0s 3240KB
stdin
10000000 0
stdout
1