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;
}

 

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