当前位置:编程学习 > VB >>

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是有范围的,数据太大超出了范围自然会溢出
引用 1 楼 jhone99 的回复:
怎么发了这么多帖子,lz貌似不会回帖?


之前的帖问题没说清楚。您也别废话了,知道答案就回帖,不知道就别扯无关的事情。
引用 2 楼 jhone99 的回复:
long是有范围的,数据太大超出了范围自然会溢出

这个数值很大,超过范围当然会溢出。你单步运行下就知道了,你循环调用了s,每调用一次就要×上次调用的结果。测试了下,即使设置为double,在33,7下也溢出。 不支持大脾气
即使回答的有误,也是在帮助你,在为你牺牲,花费了时间,精力,生命
何况回答很对

引用 3 楼 carford 的回复:
引用 1 楼 jhone99 的回复:
怎么发了这么多帖子,lz貌似不会回帖?


之前的帖问题没说清楚。您也别废话了,知道答案就回帖,不知道就别扯无关的事情。
引用 5 楼 dbcontrols 的回复:
不支持大脾气
即使回答的有误,也是在帮助你,在为你牺牲,花费了时间,精力,生命
何况回答很对


引用 3 楼 carford 的回复:
引用 1 楼 jhone99 的回复:
怎么发了这么多帖子,lz貌似不会回帖?


之前的帖问题没说清楚。您也别废话了,知道答案就回帖,不知道就别扯无关的事情。


我道歉我道歉,sorry!

引用 2 楼 jhone99 的回复:
long是有范围的,数据太大超出了范围自然会溢出

+1
引用 3 楼 carford 的回复:
引用 1 楼 jhone99 的回复:
怎么发了这么多帖子,lz貌似不会回帖?


之前的帖问题没说清楚。您也别废话了,知道答案就回帖,不知道就别扯无关的事情。

注意 n>m, 且s值不超过long型范围 在这里见识各位牛人 组合数请用杨辉三角
溢出时请用cdec
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,