我很难通过只包含0和1的数组来计算数字。我已经建立了一个函数,可以将每个数字的指数相乘,但我有点困难。问题是,我遇到了一个循环,它计算2的所有指数,而不是运行3次,所以如果我试图计算0000000000000000000000000000111(应该运行3次(,我会得到1,2,4,8,16,32,64…4194304…以及所有这3次。
我的代码是:
for(int i = 31; i > 0; i--){
if(EndArray[i] == 1){
for(x = 0; x < 30 ; x++){
UnsignedArray[30-x] = ExpoFunction(x);
}
}
}
ExpoFunction是:
int ExpoFunction(int x){
int result = 1;
for(int i = 0 ; i < x ; i++){
result *= 2;
}
return result;
}
EndArray
是一个包含32个0和1的数组。示例:000000000000000000000000000111,应该是7。最后,我想把所有的东西放在一个新的数组中,这个数组叫做UnsignedArray
,然后把UnsignedArray
的所有数字加在一起。
有什么问题或更好的方法吗?
您想将所有指数存储在UnsignedArray
中,然后将该数组中的所有值求和,以获得十进制数,对吗?如果我没有错,你的for
循环应该改为:
for(int i = 30; i >= 0; i--){ // should run from 30 to 0, not from 31 to 1
if(EndArray[i] == 1){
// just store one time, not using for loop of x as you did in your code.
UnsignedArray[30-i] = ExpoFunction(30-i);
printf("%dn", UnsignedArray[30-i]); // if you want to test the value.
}
}
测试的主要功能:
int main()
{
int EndArray[31] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1};
unsigned int UnsignedArray[31] = {0};
for(int i = 30; i >= 0; i--){
if(EndArray[i] == 1){
UnsignedArray[30-i] = ExpoFunction(30-i);
printf("%un", UnsignedArray[30-i]);
}
}
unsigned int sum = 0;
for(int i = 0; i < 31; i++) {
sum += UnsignedArray[i];
}
printf("decimal: %u", sum);
return 0;
}
输出:
1
2
4
decimal: 7