PAT-BASIC1017——A除以B

版权声明:我的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是个位数情况的测试数据。

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++解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/83240292