PAT 乙级 1017 A除以B

279 阅读1分钟

题目描述

本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

输出格式: 在一行中依次输出 Q 和 R,中间以 1 空格分隔。

输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3

思路分析

本题考察高精度除法,目前常见的算法有模拟列竖式、分治除法(现在还不会)、牛顿除法(现在也不会😂),今天我也是第一次尝试模拟高精度除法
模拟⼿动除法的过程,每次⽤第⼀位去除以B,第一位需要特别判断一下,如果不是0或者位数只有一位才输出,否则就*10加上下⼀ 位,直到最后的数为余数

OIP.png

AC代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string A;
    int B,Q,R;
    cin>>A>>B;
    int len=A.length();
    Q=(A[0]-'0')/B;
    R=(A[0]-'0')%B;
    if(Q!=0||len==1)
        cout<<Q;
    for(int i=1;i<len;i++)
    {
        Q=(R*10+A[i]-'0')/B;
        cout<<Q;
        R=(R*10+A[i]-'0')%B;
    }
    cout<<' '<<R;
    return 0;
}

总结感悟

立个flag:6月5号之前刷一道链表相关的题
再接再厉,刻苦刷题😁