我正在做代码战超级坐标和任务。
def super_sum(d, n):
return int((n - 1) * d / 2) * n ** d
这是我写的代码。它适用于大约 80% 的测试用例,但不适用于 d 为奇数且 n 为偶数的测试用例。我知道这是因为 int 舍入 0.5 导致的,但我不知道如何修复它。如果我在相乘后添加类型转换:
def super_sum(d, n):
return int((n - 1) * d / 2 * n ** d)
然后 float 将四舍五入我的答案,例如对于情况 d = 129,n = 48 正确答案是
23002614121650859314295390023813765770686356346056100481311369183953951296168089825445052658029739568132862213799732717600222459651283221457666925117931656542314825567044097809172099767486211518264294073783841553301635072
但是这个函数返回了
23002614121650859002030052273414603134163824126554165855078156468894052419381420649026479480486503703631607262290068194388824847849384465650476706583375518509855234415574540876562931392494985340953010221803338452965523456
有人可以帮我吗?预先感谢您。
最后做
// 2
。
def super_sum(d, n):
return (n - 1) * d * n ** d // 2
您是否考虑过右移一作为整数而不是除以二?记忆中的正确答案可能是你斜线的方向,但我不记得了。
int >> 1 = int/2
int >> 2 = int/4
int >> i = int/2^i