1. 程式人生 > >PAT (Basic)乙級---1017(20 分) A除以B

PAT (Basic)乙級---1017(20 分) A除以B

本題要求計算 A/B,其中 A 是不超過 1000 位的正整數,B 是 1 位正整數。你需要輸出商數 Q 和餘數 R,使得 A=B×Q+R 成立。

輸入格式:

輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。

輸出格式:

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

輸入樣例:

123456789050987654321  7 

輸出樣例:

17636684150141093474  3

程式碼:

#include <iostream>
using namespace std;

int main(){
	string A,Q;
	int B,R=0;
	cin >>A>>B;
	int length = A.length();
	int temp = A[0]-'0'; //初始化為A的第一個值 
	if(temp>=B){        //判斷A的第一個字元是否大於B
		Q.push_back(temp/B+'0'); 
	}
	for(int i=1;i<length;i++){
		R = temp%B;
		temp = R*10+(A[i]-'0');
		Q.push_back(temp/B+'0');
	}
	R = temp%B;
	if(length ==1 && (A[0]-'0')<B){	//當A只有一位數且比B小
		cout << "0 "<<A[0]-'0';
	}else{
		cout <<Q<<" "<<R;
	} 
}

總結:

  • A太大用字串儲存,模擬手算除法的步驟