题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805284923359232

题解

还算简单,就是模拟我们在生活中的计算,但我想应该会有一个通用性较高的方法,下边的代码还是有重复程度较大的代码的。

两个需要注意的点:

  1. 负数
  2. 借位
// PAT BasicLevel 1037
// https://pintia.cn/problem-sets/994805260223102976/problems/994805284923359232 #include <iostream>
#include <string>
using namespace std; int str2num(string str);
int getSum(int* p); int main()
{
// 获取用户输入
string strP,strA;
cin >> strP >> strA; // 应付
int p[3];
p[0] = str2num(strP.substr(0, strP.find_first_of('.') - 0));
p[1] = str2num(strP.substr(strP.find_first_of('.') + 1, strP.find_last_of('.') - strP.find_first_of('.') - 1));
p[2] = str2num(strP.substr(strP.find_last_of('.') + 1, strP.length() - strP.find_last_of('.') - 1));
// 实付
int a[3];
a[0] = str2num(strA.substr(0, strA.find_first_of('.') - 0));
a[1] = str2num(strA.substr(strA.find_first_of('.') + 1, strA.find_last_of('.') - strA.find_first_of('.') - 1));
a[2] = str2num(strA.substr(strA.find_last_of('.') + 1, strA.length() - strA.find_last_of('.') - 1)); // 判断符号
int flag=getSum(a)-getSum(p)>=0?1:-1; // 如果少付了,就交换数组元素
if(flag<0){
for(int i=0,temp;i<3;++i){
temp=a[i];
a[i]=p[i];
p[i]=temp;
}
} // 被找钱数
int result[3];
int diff,borrow; // 第三个数
diff=a[2]-p[2];
if(diff>=0){
result[2] = diff;
borrow=0;
}else{
result[2] = diff+29;
borrow=-1;
} // 第二个数
diff=a[1]-p[1]+borrow;
if(diff>=0){
result[1] = diff;
borrow=0;
}else{
result[1] = diff+17;
borrow = -1;
} // 第一个数
result[0]=a[0]-p[0]+borrow; // 结果
if(flag<0){
cout << '-';
}
cout << result[0] << '.' << result[1] << '.' << result[2]; //system("pause");
return 0;
} int getSum(int *p)
{
// 以Knut为单位计算总钱数
return (p[0] * 17 + p[1])*29+p[2];
} int str2num(string str)
{
// 不考虑负数,字符串转数字
int num=0;
for(int i=0;i<str.length();++i){
num=num*10+(str[i]-'0');
}
return num;
}

作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


PAT乙级1037的更多相关文章

  1. PAT 乙级 1037

    题目 题目地址:PAT 乙级 1037 题解 本题有两个版本的代码,初版因为种种问题写得比较繁琐,具体的分析见后文,更新的之后的版本相对来说要好很多,代码也比较清晰简洁. 初版的代码主要有如下几方面的 ...

  2. PAT 乙级 1037 在霍格沃茨找零钱(20)C++版

    1037. 在霍格沃茨找零钱(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 如果你是哈利·波特迷,你会知 ...

  3. PAT乙级-1037. 在霍格沃茨找零钱(20)

    如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.& ...

  4. PAT 乙级 1041

    题目 题目地址:PAT 乙级 1041 题解 这道题学到的东西恰好和1037中学到的东西相互补充,总结如下: 在之前的博文中我曾提到过——“结构体在函数内部对数据的操作不能赋给主函数中的实参,函数内部 ...

  5. C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...

  6. PAT乙级真题及训练题 1025. 反转链表 (25)

    PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...

  7. PAT 乙级 1024

    题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...

  8. PAT 乙级 1017

    题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...

  9. PAT 乙级 1015

    题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...

随机推荐

  1. 【ARM-Linux开发】 uboot启动阶段修改启动参数方法及分析

    作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个--bootloa ...

  2. 【ARM-Linux开发】【Qt开发】Qt Creator自定义编译运行步骤

    原文:http://www.linuxidc.com/Linux/2015-04/115763.htm 一直用Qt Creator开发.无它,只是因为linux下C++ IDE选择不多.同时因为我抛弃 ...

  3. 最新 科大讯飞java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.科大讯飞等10家互联网公司的校招Offer,因为某些自身原因最终选择了科大讯飞.6.7月主要是做系统复习.项目复盘.Leet ...

  4. 最新 易车java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.易车等10家互联网公司的校招Offer,因为某些自身原因最终选择了易车.6.7月主要是做系统复习.项目复盘.LeetCode ...

  5. Spirng 分层,增加数据访问对象层

    到层关键注释 @Repository 对应的包 import org.springframework.stereotype.Repository;

  6. mui 关键词查询

    <div class="pop-schwrap"> <div class="ui-scrollview"> <div class= ...

  7. GDB获取帮助信息

    用help 功能,你可以获得GDB 的命令信息. helph 你可以用help(缩写h)不带参数来显示一个命令分类的简短列表. (gdb) help List of classes of comman ...

  8. *#【Python】【基础知识】【运算符】【Python的几类运算符】

    Python的运算符分为以下几类: 算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符 以及需要考虑的:运算符优先级 一.算术运算符: 需要注意的,上图是Python 2.0 ...

  9. 使用window.open 实现弹框和居中对齐

    // 打开页面方法 window.open(url, '_blank', centerStyle('600', '400')+',toolbar=no,menubar=no,resizeable=no ...

  10. GCD欧几里得的拓展算法

    欧几里得算法的拓展主要是用于求解   : 已知整数 a, b,然后我们进行  ax + by == gcd(a , b) 的问题求解 那么如何进行求解呢?和欧几里得算法一样, 我们需要进行递归的方式进 ...