PAT(Advanced) 1058 A+B in Hogwarts C++实现
题目链接
题目大意
给定特殊格式的值A
和B
,计算A
和B
的和,以给定的特殊格式输出
算法思路
对给定字符串进行划分,转为整型,相加得到结果再转化为给定的格式并输出,注意进位即可。
AC代码
/*
author : eclipse
email : [email protected]
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
鸣谢
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!