【luogu题解】T378828 位运算
生活随笔
收集整理的這篇文章主要介紹了
【luogu题解】T378828 位运算
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
位運算
題目背景
題目由 daiyulong20120222 創作(me)
并由
QBW1117完善以及數據 。
題目描述
給定兩個數\(x,y\) ,在給定一個位運算符號 \(c\)。
請你列出 \(x,y\) 進行 \(c\) 位運算是的算數豎式式。
注:
-
豎式這么列:
-
顯示出兩個數的完整二進制,包括前導零。
-
32個 '-'。
-
顯示出 \(ans\) ,包括前導零。
-
-
位運算符號可能是:
-
&
-
|
-
^
-
輸入格式
三個整數\(x,y,c\)同題意
輸出格式
豎式結果
樣例 #1
樣例輸入 #1
32 21 &
樣例輸出 #1
00000000000000000000000000100000
00000000000000000000000000010101
--------------------------------
00000000000000000000000000000000
題解
做這道題有3種方法。
方法一:進制轉換(字符串)
這種方法在此不做過多的贅述,有興趣的同學可以翻看一些luogu進制轉換的題解。
不過真的是太簡單啦!
方法二:位運算&狀態壓縮
這種方法也在此不做過多的贅述。
不過也真的是太簡單啦!
·····方法三:bitset庫函數
在C++中:有一個庫函數 bitset
頭文件:#include<bitset>
詳見請查看此鏈接
AC code
#include <iostream>
#include <bitset>
using namespace std;
string performBitOperation(int x, int y, char op) {
bitset<32> binaryX(x);
bitset<32> binaryY(y);
bitset<32> result;
switch (op) {
case '&':
result = binaryX & binaryY;
break;
case '|':
result = binaryX | binaryY;
break;
case '^':
result = binaryX ^ binaryY;
break;
default:
cout << "Invalid operator!" << endl;
return "";
}
string binaryXStr = binaryX.to_string();
string binaryYStr = binaryY.to_string();
string resultStr = result.to_string();
string separator(32, '-');
string output = binaryXStr + "\n" + binaryYStr + "\n" + separator + "\n" + resultStr;
return output;
}
int main() {
int x, y;
char op;
cin >> x >> y >> op;
string result = performBitOperation(x, y, op);
cout << result << endl;
return 0;
}
總結
以上是生活随笔為你收集整理的【luogu题解】T378828 位运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 潮流周刊#28:两种线程池
- 下一篇: C/C++ 常用加密与解密算法