Vba 返回平方数而不是阶乘的阶乘函数
我的代码哪里错了?它返回任意数字的平方:Vba 返回平方数而不是阶乘的阶乘函数,vba,factorial,Vba,Factorial,我的代码哪里错了?它返回任意数字的平方: Sub factorial() Dim x As Long, i As Integer, fact As Long x = InputBox("enter the integer") For i = 1 To x fact = i * x Next i MsgBox fact End Sub 在您的代码中,fact的值在任何迭代中都会重新计算,并且不会保留。因此,最后只显示最后一个值,即x
Sub factorial()
Dim x As Long, i As Integer, fact As Long
x = InputBox("enter the integer")
For i = 1 To x
fact = i * x
Next i
MsgBox fact
End Sub
在您的代码中,
fact
的值在任何迭代中都会重新计算,并且不会保留。因此,最后只显示最后一个值,即x*i
,其中i=x
,例如输入的平方。类似这样,使用90%的代码可以工作:
Sub Factorial()
Dim x As Long, i As Long, fact As Long
x = 5
fact = 1
For i = 1 To x
fact = fact * i
Next i
Debug.Print fact
End Sub
练习循环和If
语句!?
选项显式
'如果您正在练习(循环),则:
子因子()
尺寸x为长,i为长,fct为双
x=输入框(“输入整数”)
如果x>=0和x 1,则
对于i=2到x
fct=fct*i
接下来我
如果结束
MsgBox fct
其他的
MsgBox“下次输入一个介于0和170之间的数字。”
出口接头
如果结束
端接头
“……如果不是,就用事实
子因子alexcel()
暗x等长
x=输入框(“输入整数”)
如果x>=0且x一个错误是fact
在循环中使用之前需要用fact=1
初始化。然后在循环内部,结果应乘以迭代次数,如fact=fact*i
所示。最后,为确保获得尽可能高的范围,请使用LongLong
类型(在VB7及更高版本中提供),该类型为64位整数。哦,别忘了将InputBox
返回的文本转换为数字类型
Sub factorial()
Dim x As Long, i As Long, fact As LongLong
x = CLng(InputBox("enter the integer"))
fact = 1
For i = 1 To x
fact = fact * i
Next i
MsgBox fact
End Sub
注意:不要在VBA中使用Integer
,而是选择本机32位整数Long
@braX-操作代码比您提供的链接快O(n)
是你可能要求的最好的阶乘计算方法。我刚刚随机挑选了一个例子,其中有数百个结果是用谷歌搜索出来的。@braX-我知道。但由于阶乘通常是人们给出的“东西”,当引入递归时,谷歌95%的结果都非常慢。另外4.5%的人使用记事本,速度快了一点,而实际快速完成工作的0.5%的人是一个简单的循环,就像OP中的循环一样。此外,dosent excel还有一个工作表函数来实现这一点吗?`` Sub factorial()Dim x as Long,i as Long,fact as Long x=InputBox(“输入整数”)如果x<0,则MsgBox“输入一个正数”。否则如果x>1,则对于i=2到x fact=fact*i,如果MsgBox fact End Sub```我使用了此项,则下一步我结束。但是输出是0@VBASIC208,您必须在之前使用fact=1
,因为当您使用Dim fact时,只要,那么fact
就等于0
。另外,如果您将Dim Fact用作Double
,则最多可以得到170
的结果。使用long,您最多只能得到12
的结果。看看我的第一个例子。Vityata的解决方案也有fact=1
出于同样的原因。我认为Double
可以表示多达2^53-1
的整数,而LongLong
类型可以多达2^63-1
,因此可能的输出范围要大得多。