日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

刷题:位运算

發(fā)布時(shí)間:2023/11/27 生活经验 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 刷题:位运算 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有關(guān)位運(yùn)算的幾個(gè)經(jīng)典題目

#include<iostream>using namespace std;// 不使用中間變量交換兩個(gè)整數(shù)的值
void swap(int &a, int &b)
{a  = a ^ b;b  = a ^ b;a  = a ^ b;
}// 整數(shù)的二進(jìn)制表達(dá)中有多少個(gè)1
int number_of_one(int n)
{int result = 0;while (n != 0){n = n & (n - 1);result++;}return result;
}
//在一個(gè)整數(shù)數(shù)組中,只有1個(gè)數(shù)出現(xiàn)了奇數(shù)次,其余數(shù)都出現(xiàn)了偶數(shù)次,找出出現(xiàn)奇數(shù)次的數(shù)。
int FindOddtimesNum(int arr[],int n)
{int result = 0;for (int i = 0; i < n; ++i){result ^= arr[i];}return result;
}//在一個(gè)整數(shù)數(shù)組中,只有2個(gè)數(shù)出現(xiàn)了奇數(shù)次,其余數(shù)都出現(xiàn)了偶數(shù)次,找出出現(xiàn)奇數(shù)次的數(shù)。
void FindOddtimesNum_2(int arr[], int n)
{int num_1 = 0, num_2 = 0;for (int i = 0; i < n; ++i){num_1 ^= arr[i];}int rightone = num_1 & (~num_1 +1 );for (int i = 0; i < n; ++i){if ((arr[i] & rightone) != 0) //與運(yùn)算一定要加括號(hào),要不然會(huì)出錯(cuò)num_2 ^= arr[i];}cout << "出現(xiàn)奇數(shù)次的元素為:" << num_2 <<" 和 "<< (num_1^num_2)<< endl;
}//在一個(gè)其他數(shù)都出現(xiàn) k 次的數(shù)組中找到只出現(xiàn)一次的數(shù)
int KtoTen(int *arr, int k)
{int result = 0;int n = 1;for (int i = 31; i >-1; --i){result += arr[i] * n;n = n*k;}return result;
}
void TentoK(int num, int *arr, int k)
{int i = 31;while (num != 0){arr[i--] = num % k;num = num / k;}
}
void XOr_K(int *result, int cur, int k)
{int cur_K[32] = { 0 };TentoK(cur, cur_K, k);for (int i = 31; i > -1; --i){result[i] = (result[i] + cur_K[i]) % k;}
}
int FindOnceTimeNum(int arr[], int n,int k)
{int result[32] = { 0 };for (int i = 0; i < n; ++i){XOr_K(result, arr[i], k);}return KtoTen(result, k);}int main()
{// 不使用中間變量交換兩個(gè)整數(shù)的值//int a = 10, b = 5;//cout << "a = " << a << ", b = " << b << endl;//swap(a, b);//cout << "a = " << a << ", b = " << b << endl;// 整數(shù)的二進(jìn)制表達(dá)中有多少個(gè)1//int c = 27;//cout << c << "的二進(jìn)制表達(dá)中有" << number_of_one(c) << "個(gè)1" << endl;//在一個(gè)整數(shù)數(shù)組中,只有1個(gè)數(shù)出現(xiàn)了奇數(shù)次,其余數(shù)都出現(xiàn)了偶數(shù)次,找出出現(xiàn)奇數(shù)次的數(shù)。//int d[] = {1,2,3,4,5,10,1,2,3,4,5};//cout << "出現(xiàn)奇數(shù)次的元素為:" << FindOddtimesNum(d, 11) << endl;//在一個(gè)整數(shù)數(shù)組中,只有2個(gè)數(shù)出現(xiàn)了奇數(shù)次,其余數(shù)都出現(xiàn)了偶數(shù)次,找出出現(xiàn)奇數(shù)次的數(shù)。//int e[] = { 1,2,3,4,5,10,64,1,2,3,4,5 };//FindOddtimesNum_2(e, 12);int F[] = { 1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,12,12,12,5 };cout << "出現(xiàn)1次的元素為:" << FindOnceTimeNum(F, 19,3) << endl;return 0;
}

總結(jié)

以上是生活随笔為你收集整理的刷题:位运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。