文章

166

粉丝

68

获赞

855

访问

61.6k

头像
A除以B 题解:大数除一般数
P1851 北京师范大学机试题
发布于2025年3月13日 10:20
阅读数 167

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    int n;
    while (cin >> s >> n) {
        int a[1005] = {0};  // 存储大整数的每一位
        for (int i = 0; i < s.size(); i++) {
            a[i] = s[i] - '0';  // 将字符转换为数字
        }

        int remainder = 0;  // 余数
        int flag = 0;       // 标记是否已经开始输出商
        for (int i = 0; i < s.size(); i++) {
            int current = remainder * 10 + a[i];  // 当前被除数
            a[i] = current / n;                  // 当前位的商
            remainder = current % n;              // 当前位的余数
            if (a[i] != 0) flag = 1;             // 如果商不为零,开始输出
            if (flag) cout << a[i];              // 输出商
        }
        if (!flag) cout << "0";  // 如果商为零,输出 0
        cout << " " << remainder << endl;  // 输出余数
    }
    return 0;
}

高精度除以低精度的时候,我们有三种办法,短除法,长除法,和牛顿迭代法,这个就是长除法的例子,注释已经写好了,感兴趣的同学们可以自行查阅。
本题因为是一位数,其实也可以用短除法,更好写,代码如下
 

...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发