大整数运算

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N = 1e6 + 10;
  6. // 加法
  7. vector<int> add(vector<int> &A,vector<int> &B){
  8. vector<int>C;
  9. int k = 0;
  10. for(int i = 0; i < A.size() || i < B.size(); i ++){
  11. if(i < A.size()) k += A[i];
  12. if(i < B.size()) k += B[i];
  13. C.push_back(k % 10);
  14. k /= 10;
  15. }
  16. if(k) C.push_back(1);
  17. return C;
  18. }
  19. //减法
  20. //判断A是否大于B
  21. bool cmp(vector<int> &A,vector<int> &B){
  22. if(A.size() != B.size()) return A.size() > B.size();
  23. else {
  24. for(int i = A.size() - 1; i >= 0; i --){
  25. if(A[i] != B[i]) return A[i] > B[i];
  26. }
  27. }
  28. return true;
  29. }
  30. // 减法 (A >= B)
  31. vector<int> sub(vector<int> &A,vector<int> &B){
  32. vector<int>C;
  33. for(int i = 0,t = 0; i < A.size() ; i ++){
  34. t = A[i] - t;
  35. if(i < B.size()) t -= B[i];
  36. C.push_back((t + 10) % 10);
  37. if(t < 0) t = 1;
  38. else t = 0;
  39. }
  40. while(C.size() > 1 && C.back() == 0) C.pop_back();
  41. return C;
  42. }
  43. //乘法
  44. //高精度 * 低精度
  45. vector<int> mul(vector<int> &A, int b){
  46. vector<int> C;
  47. int t = 0;
  48. for(int i = 0; i < A.size() || t; i ++){
  49. if(i < A.size()) t += A[i] * b;
  50. C.push_back(t % 10);
  51. t /= 10;
  52. }
  53. return C;
  54. }
  55. //除法
  56. //高精度 / 低精度 商是C,余数是r
  57. vector<int> div(vector<int> &A, int b,int &r){
  58. vector<int> C;
  59. r = 0;
  60. for(int i = A.size() - 1; i >= 0; i --){
  61. r= r * 10 + A[i];
  62. C.push_back(r / b);
  63. r %= b;
  64. }
  65. reverse(C.begin(),C.end());
  66. while(C.size() > 1 && C.back() == 0) C.pop_back();
  67. return C;
  68. }
  69. int main(){
  70. string a;
  71. int b;
  72. cin >> a >> b;
  73. vector<int> A;
  74. for(int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] - '0');
  75. int r;
  76. auto C = div(A, b,r);
  77. for(int i = C.size() - 1; i >= 0; i --) printf("%d",C[i]);
  78. cout << endl << r << endl;
  79. return 0;
  80. }