#143-[高精度]高精度除高精度

版权声明:反正也没有人会转,下一个 https://blog.csdn.net/drtlstf/article/details/83311108

Description

输入两个整数x,y,输出它们的商和余数。

Input

输入两个整数x,y(0 <= x,y <= 10^100)

Output

输出共计两行,第一行为它们的商,第二行为他们的余数

Sample Input

123
12

Sample Output

10
3

模板

#include <iostream>
#include <cstring>
#include <string>

#define SIZE 1010

using namespace std;

string s;
int a[SIZE], b[SIZE], temp[SIZE], lena, lenb, i;

bool comp(void) // 比较大小
{
	int i;
	
	if (lena < lenb + ::i)
	{
		return false;
	}
	if (lena > lenb + ::i)
	{
		return true;
	}
	for (i = lena; i; --i)
	{
		if (a[i] < temp[i])
		{
			return false;
		}
		if (a[i] > temp[i])
		{
			return true;
		}
	}
	
	return true;
}

void sub(void) // 减法
{
	int i;
	
	for (i = 1; i <= lena; ++i)
	{
		a[i] -= temp[i];
		if (a[i] < 0)
		{
			--a[i+1];
			a[i] += 10;
		}
	}
	while ((!a[lena]) && (lena))
	{
		--lena;
	}
	
	return;
}

int main(void)
{
	int len, c, j;
	bool flag = false;
	
	cin >> s;
	lena = s.size();
	for (i = 1; i <= lena; ++i)
	{
		a[i] = s[lena-i] - '0';
	}
	cin >> s;
	
	lenb = s.size();
	for (i = 1; i <= lenb; ++i)
	{
		b[i] = s[lenb-i] - '0';
	}
	len = max(lena - lenb, 0);
	for (i = len; ~i; --i) // 模板,不用说了
	{
		memset(temp, 0, sizeof (temp));
		for (j = 1; j <= lenb; ++j)
		{
			temp[i+j] = b[j];
		}
		c = 0;
		while (comp())
		{
			++c;
			sub();
		}
		if (c)
		{
			flag = true;
		}
		if (flag)
		{
			printf("%d", c); // 输出商
		}
	}
	
	if (!flag)
	{
		printf("0");
	}
	printf("\n");
	for (i = lena; i; --i)
	{
		printf("%d", a[i]);
	}
	if (!lena)
	{
		printf("0");
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/drtlstf/article/details/83311108