PAT乙级1037

题目链接

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

题解

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

两个需要注意的点:

  1. 负数
  2. 借位
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// 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/

欢迎讨论和交流!