PTA(Basic Level)1017.A除以B

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

输入格式:

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

输出格式:

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

输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路
  • 用数组模拟大数,仿照除法的过程即可
代码
#include<bits/stdc++.h>
using namespace std;
struct bignumber
{
	int num[1010];
	int len;
	bignumber()
	{
		memset(num, 0, sizeof(num));
		len = 0;
	}
}a;
void assignment(string s)
{
	for(int i=0;i<s.size();i++)
		a.num[i] = s[s.size() - i - 1] - '0';		//低位存储对应数字的低位
    a.len = s.size();
}
bignumber divide(bignumber a, int b, int &r)
{
	bignumber c;
	c.len = a.len;
	for(int i=a.len-1;i>=0;i--)		//从高位除起
	{
		r = r * 10 + a.num[i];		
		if(r < b)	c.num[i] = 0;	//不够除
		else
		{
			c.num[i] = r / b;	//够除
			r %= b;
		}
	}
	while(c.num[c.len - 1] == 0 && c.len > 1)	//这里>1是因为可能a<b,那么就是0
		c.len--;
	return c;
}
int main()
{
	string s;
	int b;
	cin >> s >> b;

	assignment(s);

	int r = 0;
	bignumber q =  divide(a, b, r);
	for(int i=q.len-1;i>=0;i--)
		cout << q.num[i];
	cout << " " << r;

	return 0;
}

引用

https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552

原文地址:https://www.cnblogs.com/MartinLwx/p/12546729.html