Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาบิตที่ k ในสตริงไบนารีที่สร้างจากการกลับและต่อท้ายซ้ำๆ ใน C++

สมมติว่ามีสตริงไบนารี s เริ่มต้นเป็น "0" ตอนนี้ในแต่ละรอบ ให้กลับบิต (Invert) และต่อท้าย (Append) ดังนั้นหลังรอบที่ n เราจะหาบิตที่ k สมมติว่าจำนวนรอบคือ 4 และ k = 7 ดังนั้นจะเป็น:

IterationValue (Initially 0)
101
20110
301101001
40110100110010110

ดังนั้นบิตที่ 7 คือ 1

ในแต่ละรอบ หาคอมพลีเมนต์ (Complement) และต่อท้าย ดังนั้นหลังรอบที่ n จะหาบิตที่ k

ตัวอย่าง

#include <iostream> 
using namespace std; 

string getComplement(string bin) {
    string temp = "";
    for (int i = 0; i < bin.length(); i++) {
        if (bin[i] == '0')
            temp += "1";
        else
            temp += "0";
    }
    return temp;
}

char getCharacter(string bin_str, int n, int k) {
    string res = bin_str;
    for (int i = 0; i < n; i++) {
        res += getComplement(res);
    }
    return res[k];
}

int main() {
    int n = 4;
    string bin = "0";
    cout << 7 << "th character is: " << getCharacter(bin, n, 7);
}

ผลลัพธ์

7th character is: 1