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