如何避免Python中除法后数字转换为浮点数?

问题描述 投票:0回答:2

我正在做代码战超级坐标和任务。

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

有人可以帮我吗?预先感谢您。

python floating-point integer
2个回答
0
投票

最后做

// 2

def super_sum(d, n):
    return (n - 1) * d * n ** d // 2

-4
投票

您是否考虑过右移一作为整数而不是除以二?记忆中的正确答案可能是你斜线的方向,但我不记得了。

int >> 1 = int/2
int >> 2 = int/4
int >> i = int/2^i
© www.soinside.com 2019 - 2024. All rights reserved.