PAT - 1017 A除以B(20 分)

题目

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

输入格式:

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

输出格式:

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

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

分析

模拟除法的过程,从最高位开始/B 

CASE 1: 第一位 / B = c  第一位 % B = D [(c != 0 && A.length() > 1 ) ||  A.length() == 1]

CASE 2: 当前位 + 上一位余数 * 10 / B %B  

代码

#include <iostream>
using namespace std;

int main()
{
	string A;
	int B, c = 0, D = 0;
	cin >> A >> B;
	c = (A[0] - '0') / B;
	if((c != 0 && A.length() > 1) || A.length() == 1)
		cout << c ;
	D = (A[0] - '0') % B;
	for(int i = 1; i < A.length(); i++)
	{
		c = (D * 10 + A[i] - '0') / B;
		cout << c;
		D = (D * 10 + A[i] - '0') % B;
	} 
	cout << " " << D;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Itskiki/article/details/87897192