有12组数字,每组有1-9个变量(个数用户自己进行选择),要求计算出他们共有多少种组合?为了便于理解,我简化这个问题,比如,有3组数字,每组有两个变量,例如:1,2
2,5
3,4他们应有以下组合:
123,124,153,154
223,224,253,254
也就是2的3次方,我理解为x的y次方的和,我写了一个简单的函数计算乘方:Function cf(di,mi)
dim temp,i
temp = 1
for i = 1 to CLng(mi)
temp = temp * CLng(di)
next
cf = tempEnd Function但是当有的组合次数选择较大时,就出现错误,可能是由于Long类型的取值范围限制造成的,请问,上面的基本算法我没有理解错,另外,如何解决这种大数运算的问题,非常感谢!!!

解决方案 »

  1.   

    有i组数字
    每组有个Ni个变量那么组合总数=N1 X N2 X N3 X …… X Ni
    下面是几种数据类型的表数范围
    如果连Double都不够就只能用专门的超大数计算模块了~
    ===============================================================
    Long(长整型) 4 个字节 -2,147,483,648 到 2,147,483,647 Single(单精度浮点型) 4 个字节 负数时从 -3.402823E38 到 -1.401298E-45;正数时从 1.401298E-45 到 3.402823E38 Double(双精度浮点型) 8 个字节 负数时从 -1.79769313486232E308 到 
    -4.94065645841247E-324;正数时从4.94065645841247E-324 到 1.79769313486232E308
      

  2.   

    可以参考一下这个~http://dev.csdn.net/article/28/28584.shtm
      

  3.   

    呵呵!那篇大数阶乘的算法是我写的,效率低了点,后一篇速度还行,你也看看吧!
    http://dev.csdn.net/article/28/28662.shtm你一会要算组合,一会算大数,不知想先解决什么问题?任意多数取任意个组合,我写过一个通用代码,我去找找看,找到了回复你。
      

  4.   

    晕死了!刚想发贴,才看明白,你根本就不是想算组合呀?
    标准组合的计算公式是: 
    在 m 个数中任意抽取 n 个数为一组,所有的组合可能性个数为:m!/(n!(m-n)!) 从你的要求看,只是每组中各只抽取一个数进行组合,这当然不是数学中所说的“组合”,而且你又说每组数字不定,这就不能去算乘方呀!
    这是一个非常非常简单的小问题:正确的算法是每组数字个数连乘,如:第一组3个数;第二组2个数;第三组4个数;那按你的需求,应该是3*2*4=24才对,你举的例子正好是2-2-2三组,那自然就是2*2*2=2^3啦!附:排列与组合在中学数学课本中都有计算公式,不用自己去研究的。
      

  5.   

    既然说道这个了……我再抄一段来~
    =========================
    1、 乘法原理:
      如果做一件事需要分两个步骤进行,做第一步有m1种不同方法,第二步有m2种不同方法,那么完成这件事共有N=m1×m2种不同的方法。
      推广后得到如下更一般的结论:
      如果做一件事需要分n个步骤进行,做第一步有m1种不同方法,做第二步有m2种不同方法,……,做第n步有mn种不同方法,那么完成这件事共有N=m1×m2×……×mn种不同方法2、 加法原理:
      如果完成一件事有n类办法,只在选择任何一类办法中的一种方法,这件事就可以完成。
    又已知在第一类办法中有m1种不同方法,在第二类办法中有m2种不同方法,……,在第n类办法中有mn种不同方法,那么完成这件事共有
    N=m1+m2+……+mn种不同的方法。