0
cube_Num = float(input(" X: "))
cube_Pow = 0.333
cube_Root = cube_Num**cube_Pow
print(" Result: " + str(round(cube_Root)))

现在,如果我输入 216,它会给我 ans 6,这是正确的,但是如果我输入 215,它会再次给出 6,我知道因为我使用四舍五入功能,因为我将功率提高到 0.333,大约是 1/3。有没有办法得到215 等小数点的实际立方根?

请注意,只有当我使用舍入函数时,完美的立方根答案才是正确的。我希望完美立方根是整数而不是浮点数,而非完美立方根是十进制形式。

比如 216 = 6 和 215 = 5.9

4

4 回答 4

0

round您可以决定要保留多少个小数。您还应该使用1/3而不是0.333

cube_num = float(input('X: '))
cube_pow = 1/3
cube_root = cube_num ** cube_pow
print(f'Result: {round(cube_root, 4)}')
# Result: 6.3496

str如果您使用 f-string,您也可以避免转换回。

于 2019-11-17T05:50:27.143 回答
0

round() 方法有两个参数:

number - the number that is to be rounded

ndigits (Optional) - number up to which the given number is to be rounded

在 Python 中,如果只使用没有 ndigits 参数的 round(),它会四舍五入为整数。

固定代码:

cube_Num = float(input(" X: "))
cube_Pow = 0.333
cube_Root = cube_Num**cube_Pow
print(" Result: " + str(round(cube_Root, 2)))

X:255

结果:6.33

于 2019-11-17T05:56:03.060 回答
0

首先,没有办法获得像十进制 255 这样的数字的实际立方根,因为它们是不合理的。其次,6x6x6 等于 216,而不是 256。第三,如果你想要十进制数,为什么要使用 round 函数?也使用cube_Pow= 1/3. 最后 256 和 255 的输出都是 6,因为你是四舍五入的数字6.329。这是您可以使用的代码:

cube_Num = float(input(" X: "))
cube_Pow = 1/3
cube_Root = cube_Num**cube_Pow
print(" Result: " , cube_Root)

请注意,完美立方根的答案是正确的。

不,并非总是如此。

>>> 216**(1/3)
5.999999999999999

编辑:好的,我写了它,它适用于像 216、27 等小的完美立方体:

import math
cube_Num = float(input(" X: "))
cube_Pow = 1/3
cube_Root = cube_Num**cube_Pow

floor = math.floor(cube_Root)

if floor**3 == cube_Num:
    print(floor)
elif (floor+1)**3 == cube_Num:
    print(floor+1)
else:
    print(cube_Root)
于 2019-11-17T06:03:46.703 回答
0

如果您需要计算整数的精确立方根,那么您必须进行整数运算;没有办法解决这个问题。浮点算术不够精确,无法给出正确的立方根,即使正确的立方根可以精确地表示为浮点数。问题是它1/3不能完全表示为浮点数,并且**对浮点数的操作并不能对精度做出强有力的保证(与基本算术运算不同,它确实保证了正确的舍入)。

所以这里有一个使用二分搜索算法的解决方案,它纯粹通过整数算术工作,并且总是给出准确的结果:int_cube_root(x)保证的结果是真正立方根的整数部分,即向零舍入的真正答案。

如果您想要完美立方体的精确答案,但想要非完美立方体的近似十进制答案,您可以将最后一行替换return sign * breturn sign * x ** (1/3).

def int_cube_root(x):
    if x >= 0:
        sign = 1
    else:
        x = -x
        sign = -1

    a, b = 0, x
    while a <= b:
        m = (a + b) // 2
        m3 = m * m * m

        if m3 == x:
            return sign * m
        elif m3 < x:
            a = m + 1
        else:
            b = m - 1

    # uncomment for decimal answers when x is not a perfect cube
    # return sign * x ** (1/3)

    return sign * b

测试:

>>> int_cube_root(216)
6
>>> int_cube_root(215)
5
>>> int_cube_root(-27)
-3
>>> int_cube_root(-26)
-2
>>> int_cube_root(77777777777777777777 ** 3)
77777777777777777777
>>> int_cube_root(77777777777777777777 ** 3 - 1)
77777777777777777776
于 2019-11-17T06:31:49.390 回答