#C08L03P02. C08.L03.高精度除法.程序填空.

C08.L03.高精度除法.程序填空.

题目描述

给出两个高精度整数,求它们的商和余数。

输入格式

两行,每行为一个高精度整数,长度不超过 255。

输出格式

两行,第一行为商 c,第二行为余数 d(余数为零时不要输出 0)

样例

12345678900
99
124703827
27

程序填空

#include<bits/stdc++.h>
using namespace std;
bool check(string a,string b)
{
	if(a.size()>b.size()||(a.size()==b.size()&&a>=b))
		return true;
	else
		return false;
}
string Minus(string a,string b) //返回a减b的值 
{
	int i,j,len_a,len_b;
	string ans;

	len_a=a.size();
	len_b=b.size();	
	
	int ov=0,t;
	char c;
	for(i=len_a-1,j=len_b-1;i>=0||j>=0;i--,j--)
	{
		t = a[i] - '0' - ov;

		if(j>=0)
			t = t - (b[j] - '0');

		if(t<0)
		{
			ov = 1;
			t += 10;
		}
		else
			ov = 0;
		
		c = '0' + t;
		ans =  c + ans ;
	}
	
	while(ans.size()>1&&ans[0]=='0')
		ans.erase(0,1);

	return ans;
}

int main()
{

	string a,b,aa,ans;
	char c;
	cin>>a>>b;

	int len,t,p; 
	len=a.size();
	aa="";
	p = 0;
	
	while( 填空(1) )
	{
		aa = aa+a[p++]; //
		while(aa.size()>1&&aa[0]=='0) //如果上一轮的余数为0,就会出现前导 0 
			aa.erase(0,1);
		t = 0; //t是商 
		while( 填空(2) ) //只要aa比b大,就减去b,减了多少次,意味着商就是多少 
		{
			aa = 填空(3) ;
			填空(4) ;
		}
		//退出循环的时候,aa已经是比b小,aa是余数,余数延续后面的的数字,会成为新的被被除数。 

		c = '0' + t;
		ans = ans+c;
	}

	//删除前导0 
	while(ans.size()>1&&ans[0]=='0')
		ans.erase(0,1);
	
	cout<<ans<<endl; 

	if(填空(5)) //题目说,余数为0的时候不用输出 
		cout<<aa;

	return 0;
}

填空(1):{{ input(1) }}

填空(2):{{ input(2) }}

填空(3):{{ input(3) }}

填空(4):{{ input(4) }}

填空(5):{{ input(5) }}