在霍格沃茨找零钱c++
时间: 2025-05-03 18:45:24 浏览: 27
### 霍格沃茨找零钱 C++ 实现代码
以下是基于引用中的描述以及逻辑实现的一个完整的解决方案:
```cpp
#include <iostream>
using namespace std;
int main() {
int G1, S1, K1, G2, S2, K2;
cin >> G1 >> S1 >> K1; // 哈利支付的金额
char temp; // 跳过输入中的 '.'
cin >> temp >> G2 >> temp >> S2 >> temp >> K2; // 商品价格
// 将所有单位转换为最小单位 Knut 进行计算
long long totalKnut1 = G1 * 17 * 29 + S1 * 29 + K1; // 支付总额转Knuts
long long totalKnut2 = G2 * 17 * 29 + S2 * 29 + K2; // 商品总价转Knuts
long long diff = totalKnut1 - totalKnut2; // 计算差额
if (diff < 0) { // 如果支付不足,则输出负号并取绝对值
cout << "-";
diff = -diff;
}
// 将差额重新转换回 Galleon.Sickle.Knut 的形式
int galleons = diff / (17 * 29);
diff %= (17 * 29);
int sickles = diff / 29;
int knuts = diff % 29;
// 输出结果
cout << galleons << "." << sickles << "." << knuts;
return 0;
}
```
#### 解决方案说明
该程序实现了霍格沃茨场景下的找零功能,具体逻辑如下:
- **输入处理**:通过 `cin` 获取两个金额(支付金额和商品价格),并将中间的 '.' 字符跳过[^1]。
- **统一单位**:将所有的货币单位(Galleon、Sickle 和 Knut)统一转换为最小单位 Knut 来简化运算过程[^3]。
- **差异计算**:计算支付金额与商品价格之间的差额。如果支付金额小于商品价格,则标记为负数,并将其转换为正数以便后续操作[^5]。
- **还原单位**:将最终的结果从 Knut 单位逐步还原为 Galleon、Sickle 和 Knut 形式[^4]。
---
###
阅读全文
相关推荐
















