BITS - Số bít khác nhau

Dữ liệu vào: standard input
Dữ liệu ra: standard output
Giới hạn thời gian: 1.0 giây
Giới hạn bộ nhớ: 128 megabyte
Đăng bởi: NTUcoder

Cho hai số nguyên a và b. Tính số bít khác nhau của a và b nếu biểu diễn dưới dạng nhị phân.
Giả sử a = 21, b = 78.
a[2] = 0010101
b[2] = 1001110
Vậy a và b khác nhau 5 bít.
Dữ liệu vào:
- Là hai số nguyên a, b cách nhau 1 khoảng trắng ( 0 ≤ a, b ≤ 109)
Dữ liệu xuất
- Số bít khác nhau giữa a và b

Ví dụ

  • input
    21 78
    output
    5
  • Solution :
  • #include<iostream>
    #include<string.h>
    #include<bits/stdc++.h>
    using namespace std;
    void swap(int *a,int *b){
    int temp = *a;
    *a = *b;
    *b = temp;
    }
    int kq (int a[],int n,int &lenA){
    int k = 0;
    while(n>0){
    a[k++] = n%2;
    n /= 2;
    }
    for(int i = 0;i<k/2;i++){
    swap(&a[i],&a[k-i-1]);
    }
    lenA = k;
    return lenA;
    }
    void add (int a[],int &len){
    len++;
    for(int i = len;i>0;i--){
    a[i] = a[i-1];
    }
    a[0]=0;
    }
    int main (){
    int n,m,a[105],b[105],lenA = 0,lenB = 0;
    cin >> n >> m;
    lenA = kq(a,n,lenA);
    lenB = kq(b,m,lenB);
    while(lenA != lenB){
    if(lenA>lenB){
    add(b,lenB);
    }
    else add(a,lenA);
    }
    int dem = 0;
    for(int i = 0;i<lenA;i++){
    if(a[i] != b[i]) dem++;
    }
    cout << dem;
    }

Nhận xét

Bài đăng phổ biến từ blog này

OCSE - Ốc sên ăn rau

MERGENUM - Ghép số

BACO - Bàn cờ