PAT乙級 D進位制的A+B
阿新 • • 發佈:2018-11-25
題目:
輸入兩個非負 10 進位制整數 A 和 B (≤230−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();迴圈,答案正確!但是我還是不知道是為什麼。。。(?)