PAT乙级1037
题目链接
https://pintia.cn/problem-sets/994805260223102976/problems/994805284923359232
题解
还算简单,就是模拟我们在生活中的计算,但我想应该会有一个通用性较高的方法,下边的代码还是有重复程度较大的代码的。
两个需要注意的点:
- 负数
- 借位
// 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的更多相关文章
- PAT 乙级 1037
题目 题目地址:PAT 乙级 1037 题解 本题有两个版本的代码,初版因为种种问题写得比较繁琐,具体的分析见后文,更新的之后的版本相对来说要好很多,代码也比较清晰简洁. 初版的代码主要有如下几方面的 ...
- PAT 乙级 1037 在霍格沃茨找零钱(20)C++版
1037. 在霍格沃茨找零钱(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 如果你是哈利·波特迷,你会知 ...
- PAT乙级-1037. 在霍格沃茨找零钱(20)
如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易.& ...
- PAT 乙级 1041
题目 题目地址:PAT 乙级 1041 题解 这道题学到的东西恰好和1037中学到的东西相互补充,总结如下: 在之前的博文中我曾提到过——“结构体在函数内部对数据的操作不能赋给主函数中的实参,函数内部 ...
- C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- PAT 乙级 1024
题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...
- PAT 乙级 1017
题目 题目地址:PAT 乙级 1017 题解 粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的: 具体分析一下本题: 因为题设中的除数(n)是一位整数,因此大幅简化 ...
- PAT 乙级 1015
题目 题目地址:PAT 乙级 1015 题解 常规题,难点在于理清楚排序规则,通过比较简洁的方式进行编码: 在这里我选择使用vector进行存储,并使用sort方法排序,因为本题不是简单按照大小排序, ...
随机推荐
- 【ARM-Linux开发】 uboot启动阶段修改启动参数方法及分析
作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个--bootloa ...
- 【ARM-Linux开发】【Qt开发】Qt Creator自定义编译运行步骤
原文:http://www.linuxidc.com/Linux/2015-04/115763.htm 一直用Qt Creator开发.无它,只是因为linux下C++ IDE选择不多.同时因为我抛弃 ...
- 最新 科大讯飞java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.科大讯飞等10家互联网公司的校招Offer,因为某些自身原因最终选择了科大讯飞.6.7月主要是做系统复习.项目复盘.Leet ...
- 最新 易车java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.易车等10家互联网公司的校招Offer,因为某些自身原因最终选择了易车.6.7月主要是做系统复习.项目复盘.LeetCode ...
- Spirng 分层,增加数据访问对象层
到层关键注释 @Repository 对应的包 import org.springframework.stereotype.Repository;
- mui 关键词查询
<div class="pop-schwrap"> <div class="ui-scrollview"> <div class= ...
- GDB获取帮助信息
用help 功能,你可以获得GDB 的命令信息. helph 你可以用help(缩写h)不带参数来显示一个命令分类的简短列表. (gdb) help List of classes of comman ...
- *#【Python】【基础知识】【运算符】【Python的几类运算符】
Python的运算符分为以下几类: 算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符 以及需要考虑的:运算符优先级 一.算术运算符: 需要注意的,上图是Python 2.0 ...
- 使用window.open 实现弹框和居中对齐
// 打开页面方法 window.open(url, '_blank', centerStyle('600', '400')+',toolbar=no,menubar=no,resizeable=no ...
- GCD欧几里得的拓展算法
欧几里得算法的拓展主要是用于求解 : 已知整数 a, b,然后我们进行 ax + by == gcd(a , b) 的问题求解 那么如何进行求解呢?和欧几里得算法一样, 我们需要进行递归的方式进 ...