作者tom21tom21 (平凡就好)
站内Programming
标题[问题] c++ 数字很大
时间Sat Apr 16 20:41:14 2011
double force_method(item *&list , const int &number , const double &weight){
double maxvalue=0 ; //暴力法的最佳解
long long int maxnumeber;
int *XB;
long long int temp1 = ( long long int ) pow ( 2 , number );
for( long long int i = 1 ; i < temp1 ; i++){//1~n^2-1
int *x;
x = new int [ number ];
long long int temp=i;
double sofarweight=0 , sofarvalue=0 ;//纪录目前重量 和价值
for ( int j=0 ; j < number ; j++ ){
//十进位转成二进位
x[ j ] = temp % 2 ;
temp = temp / 2 ;
//计算重量
if( x [ j ] == 1 ){
sofarweight += list[ j ].weight;
sofarvalue += list[ j ].value;
}
}
if( sofarweight <= weight && sofarvalue > maxvalue ){
maxvalue = sofarvalue;
maxnumeber = i;
XB=x;
}
}
return maxvalue;
}
我的问题在於 当number大於25的时候 程式就无法回传值
其余的没有问题(值得传输 演算法)
第一次遇到没有经验 请大大多多指教
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.47.20.115
1F:→ Dannvix:做大数 or 换语言 125.227.87.109 04/16 21:04
2F:→ tom21tom21:请问一下 做大数是什麽意思 我测试过 114.47.20.115 04/16 21:12
3F:→ tom21tom21:long long int是32bit 足够用 114.47.20.115 04/16 21:13
4F:推 suhorng:long long是64-bit才对吧.... 61.217.32.189 04/16 21:33
5F:→ suhorng:大数是指自己写程式模拟直式做加减乘除 61.217.32.189 04/16 21:33
6F:→ firejox:要做2的次方可以用左移去做123.240.128.241 04/16 23:34