1. 程式人生 > >PAT乙級 D進位制的A+B

PAT乙級 D進位制的A+B

題目:
輸入兩個非負 10 進位制整數 A 和 B (≤2​30​​−1),輸出 A+B 的 D (1<D≤10)進位制數。
輸入格式:

輸入在一行中依次給出 3 個整數 A、B 和 D。
輸出格式:

輸出 A+B 的 D 進位制數。
輸入樣例:

123 456 8

輸出樣例:

1103

作者: CHEN, Yue
單位: 浙江大學
時間限制: 200 ms
記憶體限制: 64 MB
程式碼長度限制: 16 KB

#include <iostream>
#include <deque>

using namespace std;

int main()
{
	int a,b,d;
	cin>>a>>b>>d;
	int sum=a+b;
	int remainder=0,quotient=0;
	deque<int> dq; 
	remainder=sum%d;
	quotient=sum/d;
	do 
	{
		remainder=sum%d;
		dq.push_front(remainder);
		quotient=sum/d;
		sum=quotient; 
	}while(quotient);
 unsigned	int i;
	for(i=0;i<dq.size();i++)
		cout<<dq[i];
	getchar();
	
	return 0;
}

這道題之前做過,但是當時是百度的,這次是我自己做的(驕傲臉)。十進位制數轉化為D進位制數,和十進位制數轉化為二進位制數異曲同工,就是除以D取餘。把所得的餘數逆序輸出,起初我想的是把餘數存到一個數組裡,但是餘數個數不確定,就決定採用STL裡的容器。第一次想採用vector容器,但是隻能從尾部插入元素,逆序輸出會得到負數(?)而且與原數不同(?),所以就想找一個從頭部插入元素的容器deque,問題解決了。但是提交之後答案是部分正確,直覺是while()迴圈有問題,就把while()迴圈改為了do…while();迴圈,答案正確!但是我還是不知道是為什麼。。。(?)