1022 D進制的A+B (20分)
題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344
輸入兩個非負 10 進制整數 A 和 B \((≤2^{30?1})\),輸出 A+B 的 D (1<D≤10)進制數,
輸入格式:
輸入在一行中依次給出 3 個整數 A、B 和 D,
輸出格式:
輸出 A+B 的 D 進制數,
輸入樣例
123 456 8
輸出樣例
1103
我的理解
進制轉換問題,將10進制數轉化為D進制數,使用堆疊依次存盤10進制數對D的余數,直到商為0為止,然后出堆疊即可,難得的一遍AC、、、
- 要先進行取余操作,然后再算商,否則余數會少,
- 在回圈結束后,雖然商為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;
}
更改程序
- 一開始準備使用陣列存盤余數,但是不確定余數個數,而且C++學的也不好,不怎么會用動態陣列,就簡化使用堆疊結構吧,
- 在進行計算的時候,先計算了商,后計算的余數,導致進制轉化丟失最后一位,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/100436.html
標籤:其他
上一篇:240. 食物鏈(并查集+數論)
下一篇:藍橋杯 飲料換購 數學推導
