1037

    #include<stdio.h>
    int main()
    {
    	int a,b,c;
    	scanf("%d %d",&a,&b);
    	c=a%b;
    	printf("%d",c);
    }

 

### C++ PAT 乙级 1037 题目解析 #### 霍格沃茨货币体系简介 霍格沃茨的货币单位有三种:加隆(Galleon),西可(Sickle),纳特(Knut)。其中,1 加隆等于 17 西可,而 1 西可又等于 29 纳特。 #### 输入处理 程序需接收两个金额数值作为输入,分别为购买价格 \(P\) 和支付金额 \(A\) 。两者均采用 `Galleon.Sickle.Knut` 的形式表示[^5]。 #### 计算找零逻辑 为了实现精确找零功能,需要先将给定的价格转换成最小单位——纳特,再执行减法运算得出应找回的钱数。具体步骤如下: - 将 \(P\) 和 \(A\) 中各部分按照其对应价值折合成总纳特数量; - 执行差额计算得到最终要返回给顾客的实际数额; - 把上述结果反向拆分为对应的加隆、西可以及剩余纳特数目并输出。 ```cpp #include <iostream> using namespace std; struct Money { long g, s, k; }; Money toKnut(Money m){ return {(m.g * 17 + m.s) * 29 + m.k, 0, 0}; } void fromKnut(long knut, Money& res){ res.g = knut / (17*29); knut %= 17*29; res.s = knut / 29; res.k = knut % 29; } int main(){ char ch; Money p={0}, a={0}, change={0}; // Read input values and convert them into Knuts. scanf("%ld.%ld.%ld %c %ld.%ld.%ld", &p.g,&p.s,&p.k,&ch,&a.g,&a.s,&a.k); auto pk = toKnut(p), ak = toKnut(a); if(pk.k > ak.k){puts("-1");return 0;} long diff = ak.k - pk.k; fromKnut(diff,change); printf("%ld.%ld.%ld\n", change.g, change.s, change.k); } ``` 此代码片段实现了从读取用户输入到完成找零过程的功能,并考虑到了当支付金额不足以覆盖商品成本时的情况(即直接输出 `-1`)。此外还包含了必要的结构体定义用于存储不同面值的数量及其相互之间的转换函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值