fork download
  1. #include <bits/stdc++.h> // NeOWami
  2. using namespace std;
  3.  
  4. #define ft first
  5. #define sc second
  6. #define int long long
  7. string a;
  8. int b;
  9. int signA = 1, signB = 1;
  10. void ADD(int &u, int v, int MOD) {
  11. u += v;
  12. if (u >= MOD) u -= MOD;
  13. }
  14. int MUL(int a, int b, int MOD) {
  15. int ans = 0 % MOD;
  16. for (; b; b >>= 1, ADD(a, a, MOD)) if (b & 1) ADD(ans, a, MOD);
  17. return ans;
  18. }
  19. int getRemainder(string a, int b) {
  20. int r = 0;
  21. for (char c: a) {
  22. r = MUL(r, 10, b);
  23. ADD(r, (c - '0') % b, b);
  24. }
  25. return r;
  26. }
  27.  
  28. signed main() {
  29. cin.tie(NULL)->sync_with_stdio(false);
  30. if(ifstream("remainder.inp")) {
  31. freopen("remainder.inp", "r", stdin);
  32. freopen("remainder.out", "w", stdout);
  33. }
  34. cin >> a >> b;
  35. if (a[0] == '-') {
  36. signA = -1;
  37. a = a.substr(1, (int)a.size() - 1);
  38. }
  39. if (b <= -1) {
  40. signB = -1;
  41. b *= -1;
  42. }
  43. int r = getRemainder(a, b);
  44. if (signA == 1 && signB == 1) cout << r;
  45. else if (signA == -1 && signB == 1) cout << (b - r);
  46. else if (signA == 1 && signB == -1) cout << r;
  47. else if (signA == -1 && signB == -1) cout << (b - r);
  48.  
  49. // Form theo phép tính của Google
  50. // if (signA == 1 && signB == 1) cout << r;
  51. // else if (signA == -1 && signB == 1) cout << (B - r);
  52. // else if (signA == 1 && signB == -1) cout << "-" << (B - r);
  53. // else if (signA == -1 && signB == -1) cout << "-" << r;
  54. return 0;
  55. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty