PTA 乙级 1037 在霍格沃茨找零钱 (20分) C/C++

 简单,怎么便利怎么来吧

我是直接按进位计算,可以全部换算成纳特进行计算,然后输出时进行换算

测试点1、3:找零为负,测试

C/C++

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 typedef struct {
 6     int ga, si, kn;
 7 }money;
 8 
 9 int calculate(money a, money b) {                // 这里不做传址,因为若找零为负还会用到a,p,只做传值        
10     money l;
11     if (a.kn >= b.kn) l.kn = a.kn - b.kn;        // 纳特和西可
12     else {
13         l.kn = 29 + a.kn - b.kn;
14         a.si--;
15     }
16 
17     if (a.si >= b.si) l.si = a.si - b.si;        // 加隆和西可
18     else {
19         l.si = 17 + a.si - b.si;
20         a.ga--;
21     }
22     l.ga = a.ga - b.ga;
23     if (l.ga < 0) {                                //小于零直接退出
24         return 1;
25     }
26     else {
27         cout << l.ga << "." << l.si << "." << l.kn;
28     }
29     return 0;
30 }
31 
32 int main() {
33     money p, a;
34     scanf_s("%d.%d.%d", &p.ga, &p.si, &p.kn);
35     scanf_s("%d.%d.%d", &a.ga, &a.si, &a.kn);
36     if (calculate(a, p)) { cout << "-"; calculate(p, a); }        //利用函数返回值,分为找零为正为负的情况
37     return 0;
38 }

原文地址:https://www.cnblogs.com/SCP-514/p/13375352.html