Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Đếm số có hiệu với N bằng phép XOR với N trong C++


Cho một số N. Mục tiêu là tìm các số từ 0 đến N mà hiệu với N bằng phép XOR với N.

Ta thực hiện bằng cách duyệt số từ i=0 đến i<=N và với mỗi i, nếu (N-i)==(i^N) thì tăng biến đếm.

Hãy hiểu qua các ví dụ.

Đầu vào − X=6

Đầu ra − Số lượng số có hiệu với N == XOR với N: 4

Giải thích − Các số là 0, 2, 4, 6.

Đầu vào − X=20

Đầu ra − Số lượng số có hiệu với N == XOR với N: 4

Giải thích − Các số là 0, 4, 16, 20

Phương pháp sử dụng trong chương trình dưới đây

  • Nhận số nguyên N.
  • Hàm diffisXOR(int n) nhận n và trả về số lượng số có hiệu với n bằng XOR với n.
  • Khởi tạo biến count = 0.
  • Duyệt từ i=0 đến i<=n.
  • Nếu i-n == i^n. Tăng count (Lưu ý: code gốc có lỗi biến x, nên sửa thành n).
  • Sau vòng lặp count sẽ chứa kết quả mong muốn.
  • Trả về count và in ra.

Ví dụ

#include <bits/stdc++.h>
#include <math.h>
using namespace std;

int diffisXOR(int n) {
    int count = 0;
    for (int i = 0; i <= n; i++) {
        if((n-i) == (i^n)) {
            count++;
        }
    }
    return count;
}

int main() {
    int N = 15;
    int nums = diffisXOR(N);
    cout << endl << "Số lượng số có hiệu với N == XOR với N: " << nums;
    return 0;
}

Đầu ra

Nếu chạy mã trên sẽ cho kết quả sau:

Số lượng số có hiệu với N == XOR với N: 16