大家帮忙看看下面的程序错在哪?
初始化一个bitset <32> bv,表示一个序列1,2,3,5,8,13,21(Fibonacci)
在数字的位置设置bv的相应位为1
#include "stdafx.h "
#include <iostream>
#include <bitset>
#include <iomanip>
#include <assert.h>
using namespace std;
void buildFibonacci(int f[],int n);
void initFibonacci(bitset <32> & bv,int n);
void main()
{
bitset <32> bv;
initFibonacci(bv,7);
for (int i=0;i <bv.size();++i)
{
if(bv.test(i))
cout < < "bit " < <setw(2) < <i < < "on " < <endl;
}
}
void buildFibonacci(int f[],int n)
{
f[0]=1;
f[1]=2;
for(int i=2;i <n;++i)
f[n]=f[n-1]+f[n-2];
}
void initFibonacci(bitset <32> &bv,int n)
{
assert(n> 0&&n <=32);
int f[32];
buildFibonacci(f,n);
for(int i=0;i <n;++i)
bv.set(f[i]);
}
[解决办法]
void buildFibonacci(int f[],int n)
{
f[0]=1;
f[1]=2;
for(int i=2;i <n;++i)
f[n]=f[n-1]+f[n-2];
}
这个函数的问题,for循环中i是增加的,可你怎么拿n做下标?应该用i做数组下标,还有就是用i++,别用++i,否则第一个不是f[3]了吗。
//#include "stdafx.h "
#include <iostream>
#include <bitset>
#include <iomanip>
#include <assert.h>
using namespace std;
void buildFibonacci(int f[],int n);
void initFibonacci(bitset <32> & bv,int n);
void main()
{
bitset <32> bv;
initFibonacci(bv,7);
for (int i=0;i <bv.size();++i)
{
if(bv.test(i))
cout < < "bit " < <setw(2) < <i < < "on " < <endl;
}
}
void buildFibonacci(int* f,int n)
{
f[0]=1;
f[1]=2;
for(int i=2;i <n;i++)
f[i]=f[i-1]+f[i-2];
}
void initFibonacci(bitset <32> &bv,int n)
{
assert(n> 0&&n <=32);
int f[32];
buildFibonacci(f,n);
for(int i=0;i <n;++i)
bv.set(f[i]);
}
测试结果如下,不知道是不是你想要的结果:
bit 1on
bit 2on
bit 3on
bit 5on
bit 8on
bit13on
bit21on
Press any key to continue