写在前面
- 实现思路
- 进制常量定义
const int
-
scanf
读取方式 - 统一进制计算,结果进制转换
- 题目较简单,10分钟a题
- 无废话多说
- 参考优化后代码
测试用例
input:
10.16.27 14.1.28
output:
3.2.1
input:
14.1.28 10.16.27
output:
-3.2.1
ac代码
-
统一进制后计算
#include <iostream>
using namespace std;
int main()
{
int g, s, k, k2, g2, s2, r = 17*29;
scanf("%d.%d.%d %d.%d.%d", &g,&s,&k, &g2,&s2,&k2);
long long p = g*r + s*29 + k,a = g2*r + s2*29 + k2, pa = abs(p-a);
int rg = pa/r,
rs = (pa%r)/29,
rk = pa%29;
if(a>=p) printf("%d.%d.%d", rg, rs, rk);
else printf("-%d.%d.%d", rg, rs, rk);
return 0;
}
- 优化后代码(算法笔记)
-
统一进制后计算
#include <iostream>
using namespace std;
const int G = 17 * 29;
const int S = 29;
int main()
{
int g, s, k, k2, g2, s2;
scanf("%d.%d.%d %d.%d.%d", &g,&s,&k, &g2,&s2,&k2);
long long p = g*G + s*S + k,a = g2*G + s2*S + k2, pa = abs(p-a);
int rg = pa/G,
rs = (pa%G)/S,
rk = pa%S;
if(a>=p) printf("%d.%d.%d", rg, rs, rk);
else printf("-%d.%d.%d", rg, rs, rk);
return 0;
}
学习代码
- 1037. 在霍格沃茨找零钱(20)-PAT乙级真题
-
计算中引入进制
#include <iostream>
using namespace std;
int main() {
int a, b ,c, m, n, t, x, y, z;
scanf("%d.%d.%d %d.%d.%d",&a, &b, &c, &m, &n, &t);
if (a > m || (a == m && b > n) || (a == m && b == n && c > t)) {
swap(a, m); swap(b, n); swap(c, t);
printf("-");
}
z = t < c ? t - c + 29 : t - c;
n = t < c ? n - 1 : n;
y = n < b ? n - b + 17 : n - b;
x = n < b ? m - a - 1 : m - a;
printf("%d.%d.%d", x, y, z);
return 0;
}