PAT乙级1017A除以B 20(分)

题目

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

输入格式:

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

输出格式:

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

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

代码


#include<iostream>
#include<math.h>
using namespace std;
int main()
{
	string input;
	int B,i;
	cin >> input >> B;
	for (i = 0; input[i] != '\0'; i++)
	{
		if (input[i] != '0')
			break;
	}
	input = input.substr(i);
	int len = input.length();
	int n = len / 5;
	int* a = new int[n + 1];
	int* c = new int[n + 1];
	int j = n, low, jin = 0, t;
	int result_r;
	a[n] = 0;
	c[n] = 0;
	for (i = len; i > 0; i -= 5)
	{
		if (i - 5 <= 0)
			a[j--] = atoi((input.substr(0, i)).c_str());
		else
			a[j--] = atoi((input.substr(i - 5, 5)).c_str());
	}
	low = j;
	int b[10] = { 0,1,2,3,4,5,6,7,8,9 };
	for (i = n; i > low; i--)
		c[i] = a[i];
	for (i = 0; i < 10; i++)
	{
		c[n] -= b[i];
		for (j = low + 1; j < n + 1; j++)
		{
			jin = c[j] % B;
			if (jin == 0 && j == n)
			{
				result_r = b[i];
				i = 10;
				j = n;
			}
			else
			{
				if (j != n)
					c[j + 1] += int(jin * pow(10, 5));
			}
		}
		for (t = n; t > low; t--)
			c[t] = a[t];
	}
	a[n] -= result_r;
	for (i = low + 1; i < n + 1; i++)
	{
		jin = a[i] % B;
		c[i] = a[i] / B;
		if (i != n)
			a[i + 1] += int(jin * pow(10, 5));
	}
	j = 0;
	t = 0;
	for (i = low + 1; i < n + 1; i++)
	{
		if (c[i] != 0 && t == 0)
		{
			j = n+1;
			t = 1;
			cout << c[i];
			continue;
		}
		if (i < j)
		{
			if (c[i] < 10)
				cout << "0000"<<c[i];
			else if(c[i] < 100)
				cout << "000" << c[i];
			else if (c[i] < 1000)
				cout << "00" << c[i];
			else if (c[i] < 10000)
				cout << "0" << c[i];
			else if (c[i] < 100000)
				cout <<c[i];
		}
	}
	if(low+1==n&&c[n]==0)
		cout <<0<< " " << result_r;
	else
		cout << " "<<result_r;
	return 0;
}

题目详情链接

发布了104 篇原创文章 · 获赞 0 · 访问量 2875

猜你喜欢

转载自blog.csdn.net/qq_41985293/article/details/105251599