版权声明:我的GitHub:https://github.com/617076674。真诚求星! https://blog.csdn.net/qq_41231926/article/details/83240292
我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552
题目描述:
知识点:数学
思路:大数除法,模拟手工算法实现
题给的A非常大,必须用字符串类型接收,并模拟手工除法计算结果。
(1)对A进行判断位数,如果A只有1位,那么根据其是否大于B等于B进行分别处理。
(2)如果A大于等于1位。对于A的第1位数据,要判断其是否大于B等于B,如果大于等于B则只需用第1位数据进行除即可,否则应该联合第2位数据进行除法运算。而对于接下来的其他位,都需要联合其下一位进行运算。
时间复杂度是O(n),其中n为输入数据A的位数。空间复杂度是O(1)。
本题的测试数据有漏洞:
缺少对A是个位数情况的测试数据。
扫描二维码关注公众号,回复:
3736129 查看本文章
C++代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
string q = "";
int b, r;
cin >> a >> b;
if (a.size() == 1){
if (a[0] - '0' >= b){
int temp = a[0] - '0';
q = temp / b + '0';
r = temp - b * temp / b;
}
else{
q = "0";
r = a[0] - '0';
}
}else{
int temp = a[0] - '0';
if (temp >= b){
q += temp / b + '0';
r = temp % b * 10 + (a[1] - '0');
} else {
r = temp * 10 + (a[1] - '0');
}
int num = 1;
while (num < a.size() - 1){
q += (r / b) + '0';
r = (r % b) * 10 + (a[num + 1] - '0');
num++;
}
q += (r / b) + '0';
r %= b;
}
cout << q << " " << r << endl;
return 0;
}
C++解题报告: