PAT乙级1017: A处以B(模拟大数除法)

题目描述:

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

输入格式:

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

输出格式:

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

输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3

思想 :

模拟正常的除法运算,从最高位开始每位数字除以除数,若此时能除过,则将该位除的结果输出,并对该位和除数取余,该余数和下一位数又组成一个数,继续除以除数,若能除过则继续上述步骤,否则商补0,向后借一位继续上述步骤,直至被除数最后一位,并输出余数。

AC代码:

#include <iostream> 
#include <cstring>
using namespace std;
void division(char *A,int m)
{
    int n = strlen(A);
	int R;//余数
	int k = 0;
	int t = 0;
	bool flag = true;
	
	for(int i = 0; i < n; i++)//A[0]为最高位
	{
		t = t*10+(A[i]-'0');
		if(t>=m)//被除数能除过时 
		{
			cout<<t/m;
			flag = false;	
		}	
		else if(!flag)//被处除数除不过,则向后借一位,同时该位补0(不包括商的最高位) 
		{
			cout<<0;
		}
		
		t=t%m;
	}
	
	if(flag)
	{
		cout<<0;	
	} 
	
	cout<<" "<<t<<endl;
}
int main()
{
    char A[1010];
    int B;
    cin>>A>>B;
    division(A,B);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章