0
点赞
收藏
分享

微信扫一扫

PAT_甲级_1058 A+B in Hogwarts (20分) (C++)【签到题/注意数的范围】


目录

​​1,题目描述​​

​​ 题目大意​​

​​2,思路​​

​​3,解题过程​​

​​第一搏: ​​

​​第二搏:​​

1,题目描述

PAT_甲级_1058 A+B in Hogwarts (20分) (C++)【签到题/注意数的范围】_特殊规格两数相加

Sample Input:

3.2.1 10.16.27

 

Sample Output:

14.1.28

 题目大意

类似于时分秒规格的两数相加,每一部分都有相应的权重。

 

2,思路

从权重最小的开始相加,看是否有进位。有进位的话,累加到下一部分;

注意若同一转换为最小权重的值时,结果可能超过int型表示的范围。

 

3,解题过程

第一搏: 

一开始想全部转换为最小的单位,累加后再取模/除基输出,结果测试点2过不了。(后来发现,当数据过大时,全部转换为最小单位可能会溢出。。。)

#include<iostream>
using namespace std;

int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif

int sum = 0, a, b, c;
scanf("%d.%d.%d", &a, &b, &c);
sum += a * 17 * 29 + b * 29 + c;
scanf("%d.%d.%d", &a, &b, &c);
sum += a * 17 * 29 + b * 29 + c;

c = sum % 29;
b = (sum / 29) % 17;
a = sum / 29 / 17;
printf("%d.%d.%d", a, b, c);
return 0;
}

 

PAT_甲级_1058 A+B in Hogwarts (20分) (C++)【签到题/注意数的范围】_特殊规格两数相加_02

测试用例

测试用例:
3700895.13.20 7969137.2.19

对应输出应该为:
11670032.16.10

你的输出为:
2958131.12.23

第二搏:

还是老老实实的一位一位算吧。。。

#include<iostream>
using namespace std;

int main(){
#ifdef ONLINE_JUDGE
#else
freopen("1.txt", "r", stdin);
#endif
int sum = 0, a, b, c, d, e, f;
int flag = 0;
scanf("%d.%d.%d", &a, &b, &c);
scanf("%d.%d.%d", &d, &e, &f);
c += f;
if(c >= 29){
flag = 1;
c -= 29;
}
b += (e + flag);
flag = 0;
if(b >= 17){
flag = 1;
b -= 17;
}
a += (d + flag);

printf("%d.%d.%d", a, b, c);
return 0;
}

PAT_甲级_1058 A+B in Hogwarts (20分) (C++)【签到题/注意数的范围】_1058_03

举报

相关推荐

0 条评论