您好,登錄后才能下訂單哦!
第0行
第1行(32-63),依次類推。
C++代碼如下:
/** @file Bitmap
* @copyright personal
* @brief 接口頭文件
* @version v1.0.0
* @author fangyuan
* @date 2015/10/20
* @note 測(cè)試版本
*/
#include "iostream"
#include <math.h>
#include "vector"
#define INT_BYTES sizeof(int) //int型所占字節(jié)
#define INT_BITS (8*INT_BYTES) //int型所占位數(shù)
#define MAXNUM (1024*1024*1024) //最大數(shù)
#define SHIFT_BIT (int)(log(double(INT_BITS))/log(double(2))) //最大移位數(shù),左移一位等價(jià)于*2,即最大^SHIFT_BIT
#define MASK (INT_BITS-1) //根據(jù)int類型變化,一般為31
using namespace std;
//int bitmap[MAXNUM/INT_BITS]; //超出數(shù)組范圍定義
vector<int> bitmap(MAXNUM/INT_BITS); //自動(dòng)初始化為,若非C++,可自定為list;
void set(int i)
{
//i>>SHIFT_BIT等價(jià)于i/INT_BITS,i & MASK等價(jià)于i%MASK,取余的分母一般為^n-1
bitmap[i>>SHIFT_BIT] |= 1<<(i & MASK); //當(dāng)前位,置為1,再進(jìn)行或運(yùn)算
}
//獲取第i行,第j列
bool get(int i,int j)
{
//return (bitmap[i>>SHIFT_BIT] & 1<<(i & MASK));
return (bitmap[i] & 1<<(j & MASK));
}
int main()
{
set(2);
set(3);
set(50000000);
set(100);
set(50);
//不按數(shù)字遍歷,按行遍歷,減少遍歷次數(shù)
for(int i = 0; i < bitmap.size(); ++i)
{
if( !bitmap[i] )
{
continue;
}
for(int j = 0; j <= MASK;++j)
{
bool result = get(i,j);
if(result)
{
cout << i*INT_BITS+j << endl;
}
}
}
system("pause");
return 0;
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。