生活随笔
收集整理的這篇文章主要介紹了
刷题:位运算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有關位運算的幾個經典題目
#include<iostream>using namespace std;// 不使用中間變量交換兩個整數的值
void swap(int &a, int &b)
{a = a ^ b;b = a ^ b;a = a ^ b;
}// 整數的二進制表達中有多少個1
int number_of_one(int n)
{int result = 0;while (n != 0){n = n & (n - 1);result++;}return result;
}
//在一個整數數組中,只有1個數出現了奇數次,其余數都出現了偶數次,找出出現奇數次的數。
int FindOddtimesNum(int arr[],int n)
{int result = 0;for (int i = 0; i < n; ++i){result ^= arr[i];}return result;
}//在一個整數數組中,只有2個數出現了奇數次,其余數都出現了偶數次,找出出現奇數次的數。
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) //與運算一定要加括號,要不然會出錯num_2 ^= arr[i];}cout << "出現奇數次的元素為:" << num_2 <<" 和 "<< (num_1^num_2)<< endl;
}//在一個其他數都出現 k 次的數組中找到只出現一次的數
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()
{// 不使用中間變量交換兩個整數的值//int a = 10, b = 5;//cout << "a = " << a << ", b = " << b << endl;//swap(a, b);//cout << "a = " << a << ", b = " << b << endl;// 整數的二進制表達中有多少個1//int c = 27;//cout << c << "的二進制表達中有" << number_of_one(c) << "個1" << endl;//在一個整數數組中,只有1個數出現了奇數次,其余數都出現了偶數次,找出出現奇數次的數。//int d[] = {1,2,3,4,5,10,1,2,3,4,5};//cout << "出現奇數次的元素為:" << FindOddtimesNum(d, 11) << endl;//在一個整數數組中,只有2個數出現了奇數次,其余數都出現了偶數次,找出出現奇數次的數。//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 << "出現1次的元素為:" << FindOnceTimeNum(F, 19,3) << endl;return 0;
}
總結
以上是生活随笔為你收集整理的刷题:位运算的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。