C. Short Program
1.題意
編寫一個程序,縮短位運(yùn)算的次數(shù),但能達(dá)到相同的結(jié)果。
2.題解
沒有思路,看題解+學(xué)習(xí)bitset。用bitset存全1和全0的數(shù)進(jìn)行一遍輸入的操作,比較結(jié)果中的各位,用三個bitset分別存與運(yùn)算、異或運(yùn)算和或運(yùn)算。如果都是0,則三個運(yùn)算都是0;如果都是1,則與運(yùn)算和或運(yùn)算為1,異或運(yùn)算為0;如果全1為0全0為1則異或?yàn)?,其余情況類比即可,輸出時將bitset轉(zhuǎn)換成unsigned long long類型。
3.代碼
1 #include<bits/stdc++.h> 2 using namespace std; 3 string s = "1111111111"; 4 bitset<10> a(s), b(0), t1(0), t2(0), t3(0); 5 int n, t; 6 string c; 7 int main() { 8 cin >> n; 9 while(n--) { 10 cin >> c >> t; 11 if(c == "&") { 12 a &= t; 13 b &= t; 14 } else if(c == "|") { 15 a |= t; 16 b |= t; 17 } else { 18 a ^= t; 19 b ^= t; 20 } 21 } 22 23 for(int i = 0; i < 10; i++) { 24 if(a[i] == 0 && b[i] == 0) { 25 t1[i] = 0; 26 t2[i] = 0; 27 t3[i] = 0; 28 } else if(a[i] == 0 && b[i] == 1) { 29 t1[i] = 1; 30 t2[i] = 1; 31 t3[i] = 0; 32 } else if(a[i] == 1 && b[i] == 0) { 33 t1[i] = 1; 34 t2[i] = 0; 35 t3[i] = 0; 36 } else if(a[i] == 1 && b[i] == 1) { 37 t1[i] = 1; 38 t2[i] = 0; 39 t3[i] = 1; 40 } 41 } 42 43 cout << 3 << endl; 44 cout << "& " << t1.to_ulong() << endl; 45 cout << "^ " << t2.to_ulong() << endl; 46 cout << "| " << t3.to_ulong() << endl; 47 48 return 0; 49 }
浙公網(wǎng)安備 33010602011771號