NOIP 提高组初赛 · NOIP 2017 提高组初赛试题 第 27 题

阅读程序 · 答案 p[0]rest<qq>restrest/qrest%q*10+p[i]rest%q · 考点:输入输出、位运算、分支结构、循环结构、高精度计算

← 整套速查表 NOIP 提高组初赛 全部真题

题目

(大整数除法)给定两个正整数 $p$ 和 $q$,其中 $p$ 不超过 $10^{100}$, $q$ 不超过 $100000$, 求 $p$ 除以 $q$ 的商和余数。

(第一空 $2$ 分,其余 $3$ 分) 输入:第一行是 $p$ 的位数 $n$,第二行是正整数 $p$,第三行是正整数 $q$。 输出:两行,分别是 $p$ 除以 $q$ 的商和余数。

#include <iostream>
using namespace std;
int p[100];
int n, i, q, rest;
char c;
int main()
{
    cin >> n;
    for (i = 0;
         i < n; i++)
    {
        cin >> c;
        p[i] = c - '0';
    }
    cin >> q;
    rest = (1);
    i = 1;
    while ((2) && i < n)
    {
        rest = rest * 10 + p[i];
        i++;
    }
    if (rest < q)
        cout << 0 << endl;
    else
    {
        cout << (3);
        while (i < n)
        {
            rest = (4);
            i++;
            cout << rest / q;
        }
        cout << endl;
    }
    cout << (5) << endl;
    return 0;
}
答案:p[0]rest<qq>restrest/qrest%q*10+p[i]rest%q

考点

输入输出位运算 讲解 →位运算 真题汇总 →分支结构循环结构高精度计算 讲解 →高精度计算 真题汇总 →

解题思维

模拟竖式除法:rest<q 时商 0 继续拉位;rest>=q 时商 rest/q,余数 rest%q*10+p[i]。

常见错误

循环条件漏等号导致商 1 漏位;更新余数先除后取模顺序颠倒;最后输出余数忘取模直接输 rest。

详细解析(节选)

考点:高精度除法模拟|竖式算法

程序在做什么

输入大整数 p 和 q,模拟手算除法:从高位开始,余数乘 10 加下一位,够除则商,否则商 0,最后输出余数。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断