PAT乙级1037

Posted chouxianyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1037相关的知识,希望对你有一定的参考价值。

题目链接

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的主要内容,如果未能解决你的问题,请参考以下文章

PAT 乙级 1037 在霍格沃茨找零钱

PAT乙级1037 在霍格沃茨找零钱 (20 分)

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

PAT乙级1006题python3代码

PAT乙级-1002 写出这个数

pat可以直接考甲级吗