Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 返回平方数而不是阶乘的阶乘函数_Vba_Factorial - Fatal编程技术网

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
,因此可能的输出范围要大得多。