C++|PAT乙级-1037

0、难点

  • swap(a,b)函数
  • 进位与借位的实现方法
1、题目 【C++|PAT乙级-1037】1037 在霍格沃茨找零钱 (20 分)
2、代码
#include using namespace std; int main(int argc, char **argv) { int a,b,c,m,n,t,x,y,z; scanf("%d.%d.%d %d.%d.%d",&a,&b,&c,&m,&n,&t); // 应付 带的钱 if(a>m || (a==m && b>n) || (a==m && b==n &&c>t)){ //要付的钱比带的钱多 printf("-"); }else{ swap(a,m); swap(b,n); swap(c,t); //将将多的放在前面,方便前后相减 //则有一下情况 // 3.x.x 2.x.x最高位大于左边 // 3.2.x 3.1.x最高位相等,但中位更大 // 3.2.1 3.2.0最高位相等,中位相等,最低位更大 // 3.2.1 3.2.1完全相等 }z=c>=t?c-t:c+29-t; //末尾相减,如果不够借位+29 b=c>=t?b:b-1; //若末尾小减大则必借了位,这里中位则-1 y=b>=n?b-n:b+17-n; //中位相减,如果不够借位+17 x=b>=n?a-m:a-1-m; // 因为swap交换了,所以最高位直接相减即可,但是可能有借位,所以判断一下中位大小并-1printf("%d.%d.%d",x,y,z); return 0; }

    推荐阅读