PAT乙級1022

1022 D進制的A+B (20分)

題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344ios

輸入兩個非負 10 進制整數 A 和 B \((≤2^{30−1})\),輸出 A+B 的 D (1<D≤10)進制數。數組

輸入格式:

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

輸出格式:

輸出 A+B 的 D 進制數。code

輸入樣例

123 456 8

輸出樣例

1103

個人理解

進制轉換問題,將10進制數轉化爲D進制數,使用棧依次存儲10進制數對D的餘數,直到商爲0爲止。而後出棧便可。可貴的一遍AC、、、ci

  1. 要先進行取餘操做,而後再算商,不然餘數會少。
  2. 在循環結束後,雖然商爲0,此時也要記得把餘數入棧。

代碼段

#include <iostream>
#include <stack>
using namespace std;
int main() {
    long long A, B;
    short D;
    cin >> A >> B >> D;
    long long remainder = (A + B) % D;
    long long C = (A + B) / D;
    stack<long long> s;
    // 先進行求餘,再計算商
    while (C != 0) {
        s.push(remainder);
        remainder = C % D;
        C /= D;
    }
    s.push(remainder);
    while (!s.empty()) {
        cout << s.top();
        s.pop();
    }
    cout << endl;
    return 0;
}

更改過程

  1. 一開始準備使用數組存儲餘數,可是不肯定餘數個數,並且C++學的也很差,不怎麼會用動態數組,就簡化使用棧結構吧。
  2. 在進行計算的時候,先計算了商,後計算的餘數,致使進制轉化丟失最後一位。
相關文章
相關標籤/搜索