fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. #define base 10000
  6. #define blockSize 4
  7.  
  8. typedef vector<ll> bignum;
  9.  
  10. bignum add(bignum a, bignum b) {
  11. bignum c;
  12. c.resize(max(a.size(), b.size()));
  13. a.resize(c.size());
  14. b.resize(c.size());
  15. ll mem = 0;
  16. for (int i = 0; i < c.size(); ++i){
  17. ll sum = mem + a[i] + b[i];
  18. c[i] = sum%base;
  19. mem = sum/base;
  20. }
  21. if(mem > 0) c.push_back(mem);
  22. return c;
  23. }
  24.  
  25. bignum subtract(bignum a, bignum b) {
  26. bignum c;
  27. c.resize(max(a.size(), b.size()));
  28. //Resize để thêm 0 vào cuối cho những số có độ dài khác nhau
  29. a.resize(c.size());
  30. b.resize(c.size());
  31. ll mem = 0;
  32. for (int i = 0; i < c.size(); ++i){
  33. ll sub = a[i] - b[i] - mem;
  34. if(sub < 0){
  35. mem = 1;
  36. sub += base;
  37. }else
  38. mem = 0;
  39. c[i] = sub;
  40. }
  41. //loại bỏ các số 0 ở đầu
  42. while(c.size()>1 && c[c.size()-1] == 0) c.pop_back();
  43. return c;
  44. }
  45.  
  46. bignum multiple(bignum a, ll b) {
  47. bignum c;
  48. c.resize(a.size());
  49. ll mem = 0;
  50. for (int i = 0; i < c.size(); ++i){
  51. ll mul = mem + a[i]*b;
  52. c[i] = mul%base;
  53. mem = mul/base;
  54. }
  55. while(mem>0){
  56. c.push_back(mem%base);
  57. mem/=base;
  58. }
  59. return c;
  60. }
  61.  
  62. bignum toBignum(string a){
  63. bignum c;
  64. c.clear();
  65. for(int i = a.size()-1; i >=0; i-=blockSize){
  66. c.push_back(stoll(a.substr(max(0, i-blockSize+1), min(blockSize, i+1))));
  67. }
  68. return c;
  69. }
  70.  
  71. string toString(bignum a){
  72. string s = "";
  73. for(int i = a.size()-1; i >=0; i--){
  74. string x = to_string(a[i]);
  75. while(i!=a.size()-1 && x.size()<blockSize) x = "0"+x;
  76. s=s+x;
  77. }
  78. return s;
  79. }
  80.  
  81. int main() {
  82. string a,b;
  83. cin>>a>>b;
  84. bignum A = toBignum(a);
  85. bignum B = toBignum(b);
  86. // bignum C = add(A,B);
  87. // bignum C = subtract(A,B);
  88. bignum C = multiple(A,12345);
  89. cout<<toString(C);
  90. }
Success #stdin #stdout 0.01s 5348KB
stdin
987698769767
123456789

stdout
12193141312773615