目录
1,题目描述
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;
}
测试用例
测试用例:
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;
}