题目描述
本题要求计算 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加上下⼀
位,直到最后的数为余数
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号之前刷一道链表相关的题
再接再厉,刻苦刷题😁