PAT(Advanced) 1058 A+B in Hogwarts C++实现

PAT(Advanced) 1058 A+B in Hogwarts C++实现

题目链接

1058 A+B in Hogwarts

题目大意

给定特殊格式的值AB,计算AB的和,以给定的特殊格式输出

算法思路

对给定字符串进行划分,转为整型,相加得到结果再转化为给定的格式并输出,注意进位即可。

AC代码

/*
author : eclipse
email  : eclipsecs@qq.com
time   : Thu Jan 28 17:47:20 2021
*/
#include <bits/stdc++.h>
using namespace std;

struct MagicForm {
    int galleon;
    int sickle;
    int knut;
    friend ostream& operator<<( ostream & os, const MagicForm & x) {
        os << x.galleon << "." << x.sickle << "." << x.knut;
        return os;
    }
};

MagicForm transfer(string number) {
    MagicForm magicForm;
    string temp = "";
    bool first = true;
    for (int i = 0; i < number.size(); i++) {
        if (number[i] == '.') {
            if (first) {
                magicForm.galleon = atoi(temp.c_str());
                first = false;
            } else {
                magicForm.sickle = atoi(temp.c_str());
            }
            temp.clear();
        } else {
            temp += number[i];
        }
    }
    magicForm.knut = atoi(temp.c_str());
    return magicForm;
}

MagicForm compute(MagicForm magicFormA, MagicForm magicFormB) {
    MagicForm magicForm;
    int carry = 0;

    int knut = magicFormA.knut + magicFormB.knut;
    carry = knut / 29;
    knut %= 29;
    magicForm.knut = knut;

    int sickle = magicFormA.sickle + magicFormB.sickle + carry;
    carry = sickle / 17;
    sickle %= 17;
    magicForm.sickle = sickle;

    magicForm.galleon = magicFormA.galleon + magicFormB.galleon + carry;
    return magicForm;
}

int main(int argc, char const *argv[]) {
    string A, B;
    cin >> A >> B;
    MagicForm magicFormA, magicFormB;

    magicFormA = transfer(A);
    magicFormB = transfer(B);

    MagicForm magicForm = compute(magicFormA, magicFormB);
    cout << magicForm;

    return 0;
}

样例输入

3.2.1 10.16.27

样例输出

14.1.28

鸣谢

PAT

最后

  • 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值