zoukankan      html  css  js  c++  java
  • 10.高精度除法

     大数除以一个小数

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 //A/b商是C,余数是r 
     4 vector<int> div(vector<int> &A, int b, int &r) {
     5     vector<int> C;
     6     r = 0;
     7     //注意除法是从最高位开始算的 
     8     //前面那仨都是从最低位开始算 
     9     for (int i = A.size() - 1; i >= 0; i--) {
    10         r = r * 10 + A[i];
    11         C.push_back(r / b);
    12         r %= b;
    13     }
    14     //C[0]是最高位 
    15     reverse(C.begin(), C.end());
    16     while (C.size() > 1 && C.back() == 0) {
    17         C.pop_back();
    18     }
    19     return C;
    20 }
    21 int main () {
    22     string a;
    23     int b;
    24     cin >> a >> b;
    25     vector<int> A, C;
    26     for (int i = a.length() - 1; i >= 0; i--) {
    27         A.push_back(a[i] - '0');
    28     }
    29     int r;
    30     C = div(A, b, r);
    31     for (int i = C.size() - 1; i >= 0; i--) {
    32         cout << C[i];
    33     }
    34     cout << endl << r << endl;
    35     return 0;
    36 }

     2020年9月29日更新:压8位的做法

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const int base = 1000000000;
     5 vector<ll> div(vector<ll> &A, int b, ll &r) {
     6     vector<ll> C;
     7     r = 0;
     8     for (ll i = A.size() - 1; i >= 0; i--) {
     9         r = r * base + A[i];
    10         C.push_back(r / b);
    11         r %= b;
    12     }
    13     reverse(C.begin(), C.end());
    14     while (C.size() > 1 && C.back() == 0) {
    15         C.pop_back();
    16     }
    17     return C;
    18 }
    19 int main() {
    20     string a;
    21     int b;
    22     cin >> a >> b;
    23     vector<ll> A, C;
    24     for (ll i = a.size() - 1, s = 0, j = 0, t = 1; i >= 0; i--) {
    25         s += (a[i] - '0') * t;
    26         j++;
    27         t *= 10;
    28         if (j == 9 || i == 0) {
    29             A.push_back(s);
    30             s = 0;
    31             j = 0;
    32             t = 1;
    33         }
    34     }
    35 
    36     ll r;
    37     C = div(A, b, r);
    38     cout << C.back();
    39     for (ll i = C.size() - 2; i >= 0; i--) {
    40         cout << setw(9) << setfill('0') << C[i];
    41     }
    42     cout << endl << r << endl;
    43     return 0;
    44 }
  • 相关阅读:
    表单提交
    js 设备判断(移动端pc端 安卓ios 微信)
    js 页面history.back()返回上一页,ios 不重新加载ready的解决办法
    移动端解决单机事件延迟fastclick
    定时器时间动态变化(变速)
    gulp配置(编译压缩转码自动刷新注释全)
    ios和安卓H5交互桥接
    倒计时
    PHP跨域jsonp方式
    1.Redis简介/配置文件
  • 原文地址:https://www.cnblogs.com/fx1998/p/12817623.html
Copyright © 2011-2022 走看看