最后一个测试点源于没有考虑P, A的钱是一样的,输出格式应该为:0.0.0
思路:
我的思路是先构造两个函数,一个(假定为函数trans)是将 x.x.x的格式全部换算成最小单位 纳特(Knut)
另一个(假定为函数retrans)是将以最小单位纳特(Knut)计量的数转化为 x.x.x的格式;
之所以这样子做是因为
1.全部换算成最小单位十分方便计算
2.使用函数可以减少内存占用
现在开始代码实现:
1.编写函数trans()
由于进制是1-17-29
所以可以下面这个样子:
def trans(strg): g, s, k = map(int, strg.split('.')) # 以.分隔 num = g * 17 * 29+ s * 29 + k # 进制换算 return num
2.编写函数retrans()
def retrans(num): g = num // (17 * 29) s = (num - g * 17 * 29) // 29 k = (num - g * 17 * 29 - s * 29) strg = '.'.join([str(g), str(s), str(k)]) # 以.连接列表各元素 return strg
3.接收数据-数据处理
1. p, a = input().split() 2. p_t, a_t = trans(p), trans(a)
4.数据输出(判断二者是否相等)
1. if p_t < a_t: 2. print(retrans(a_t - p_t)) 3. elif p_t > a_t: 4. print('-' + retrans(p_t - a_t)) 5. else: 6. print('0.0.0')
5.完整代码如下:
def trans(strg): g, s, k = map(int, strg.split('.')) num = g * 17 * 29+ s * 29 + k return num def retrans(num): g = num // (17 * 29) s = (num - g * 17 * 29) // 29 k = (num - g * 17 * 29 - s * 29) strg = '.'.join([str(g), str(s), str(k)]) return strg p, a = input().split() p_t, a_t = trans(p), trans(a) if p_t < a_t: print(retrans(a_t - p_t)) elif p_t > a_t: print('-' + retrans(p_t - a_t)) else: print('0.0.0')