vb long数据类型产生溢出,请教!
写了一个数学里的组合算法,也就是 m 这个公式,从n中选择m有几种选法。C
n
出现问题的是 m
C =[n*(n-1)...*(n-m+1)]/m!
n
中的[n*(n-1)...*(n-m+1)]部分。
代码如下:
Function s(n As Long, m As Long, key As Boolean) As Long
If key = True Then
m = n - m + 1
key = False
End If
If n = m Then
s = n
Else
n = n * s((n - 1), m, key)
s = n
End If
End Function
调用:msgbox s(33,11)
运行时产生溢出,为什么啊?怎么解决,有知道的吗?
错误类型vb提示的是:
实时错误‘6’
溢出
调试指向 n = n * s((n - 1), m, key)这句
假如调用msgbox s(33,5),史m值小一点,则不会出现溢出错误。
怎么回事? 请教各位!
怎么发了这么多帖子,lz貌似不会回帖? long是有范围的,数据太大超出了范围自然会溢出
之前的帖问题没说清楚。您也别废话了,知道答案就回帖,不知道就别扯无关的事情。
这个数值很大,超过范围当然会溢出。你单步运行下就知道了,你循环调用了s,每调用一次就要×上次调用的结果。测试了下,即使设置为double,在33,7下也溢出。 不支持大脾气
即使回答的有误,也是在帮助你,在为你牺牲,花费了时间,精力,生命
何况回答很对
我道歉我道歉,sorry!
+1
注意 n>m, 且s值不超过long型范围 在这里见识各位牛人 组合数请用杨辉三角
溢出时请用cdec
补充:VB , 基础类