返回首页

您好,
我想在我的项目得到2个号码之间的所有组合,例如,如果我有2个数组的第一个商店的最小约束和最大的约束,所以第二个商店arr1的[3] = {1,1,2} arr2 = {2,2,3},所以我应该建立一个二维数组存储的所有组合,这是
112,212,122,222,113,...,223。
首先,我计算的二维数组的行数和以来的最小和最大的元素的数量有所不同,10和20之间的某个时候,它给我大量需要建立一个庞大的阵列,我的代码是:


 

      unsigned long long row =0;  // to count the number of row

      unsigned long long rh1 = 1;

     

      for(int i=0; i<col;++i)	{ 	 

	  rh1 *= t_end[i] - t_s[i] + 1;// t_end is max bound array, t_s is the min bound arr   

	  row += rh1; 	 

        

       cout << "Row= "<< row <<endl;

        }


数(行),所以有一段时间变得如此之大,无法处理这个值,例如,如果我有以下的最小值和最大值的约束:
t_s = {3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2}
t_end = {2 3 4 6 10 3 11 11 13 4 15 8 9 19 19 20 23 27 10}

然后行会如下:
{C}
和某个行值成为负数,因此,如何解决这个问题,我当然不能建立一个数组,这个数量庞大的行,我想分裂,但我不能得到的行号让我来计算的子​​数组的数目,我应该有。
其他问题是什么,我能有如何知道数组的最大尺寸。

回答

评论会员:埃斯Harlinn 时间:2012/02/06
12879056739084163488是一个非常大的数字,你的下一次迭代环绕为unsigned long long的大小限制,造成较小的数字

[更新]
你可以尝试

最好的问候
埃斯Harlinn
评论会员:markkuk 时间:2012/02/06
使用{A}]
评论会员:游客 时间:2012/02/06
|Stefan_Lang:我认为有本质上的错误的东西在你的算法,根据您的实际问题是什么:要么你是值的数组,或者你是谈论的数字位数。使您的问题的例子表明,你是不是,实际上(可能很长)在所有的数字的数字以来的最高值是不是数字,在所有!那么,你为什么这些数字阵列转换成一个大的整数?只要坚持用数字​​阵列,就像你定义你的min和max阵列!问题迎刃而解。PS:我刚刚注意到你甚至说,你需要定义一个二维数组来存储所有的中间组合,让您的要求是,毕竟,产生一个号码,而不是一个很长的数字列表数组列表