Vba 检查数字是否具有整数立方根
我正在尝试检查给定的数字在VBA中是否为cuberoot。Vba 检查数字是否具有整数立方根,vba,Vba,我正在尝试检查给定的数字在VBA中是否为cuberoot。 以下代码仅适用于2和3作为答案,之后不起作用。 我试图找出代码中的错误 Sub cuberoot() Dim n As Long, p As Long, x As Long, y As Long x = InputBox("x= ") If Iscube(x) Then MsgBox ("Is cube") Else MsgBox ("No cube") End
以下代码仅适用于2和3作为答案,之后不起作用。
我试图找出代码中的错误
Sub cuberoot()
Dim n As Long, p As Long, x As Long, y As Long
x = InputBox("x= ")
If Iscube(x) Then
MsgBox ("Is cube")
Else
MsgBox ("No cube")
End If
End Sub
由于您传递的是一个
Long
,因此我假设您的数字不会大于大约2*10^9,因此这应该始终有效。这是一个微小的变化,在这里您截断double,然后与两个最近的整数进行比较,以确保捕获任何舍入错误
编辑:在VBA中,截断总是四舍五入的,因此只需要检查第三个根值:
Public Function Iscube(a As Long) As Boolean
Dim b As Integer
b = CInt(a ^ (1# / 3#))
If (b ^ 3 = a) Then
Iscube = True
Else
Iscube = False
End If
End Function
如果你需要一个大于<代码>长的数字,你需要改变你的输入类型,你可能需要考虑一个迭代方法,比如二进制搜索或者牛顿Raphson求解器。
如果添加一个
尺寸b尽可能长
如果你调试你的代码,你会看到125中的feed给你带来的好处
b=5Int(b)=4 更新代码 您可以将布尔测试缩短为
Function Iscube(lngIn As Long) As Boolean
Iscube = (Val(lngIn ^ (1 / 3)) = Int(Val(lngIn ^ (1 / 3))))
End Function
请注意,如果您使用double调用它,它将仅在长部分上运行(因此它将看到
IsCube(64.01)
为IsCube(64)
)如果我输入125
,它是5
的立方根,我正确地得到了答案是cube
,即使你说它只适用于2
和3
。我认为你应该澄清什么是输入、你期望的输出和你得到的输出,以便我们理解你的意思。否则,我只能说,根据您的描述,您的代码应该可以正常工作。@MatteoNNZ没有维度b,只要上面的代码对我无效,因为int(b)返回4。@Apurva我希望您已经找到了问题的答案。如果是这样,这里的习惯是接受为您的问题提供最佳解决方案的答案。你可以阅读更多关于这方面的内容。
Function Iscube(lngIn As Long) As Boolean
Iscube = (Val(lngIn ^ (1 / 3)) = Int(Val(lngIn ^ (1 / 3))))
End Function