fbpx

Problema #2624 – invbits – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Dat fiind un număr natural n, să se determine numărul natural m care are are proprietatea că are în reprezentarea în baza 2 biți de 1 pe pozițiile unde n are biți de 0 și are biți de 0 pe pozițiile unde n are biți de 1. De exemplu, dacă n = 346, atunci m = 165, deoarece n se reprezintă în baza 2 prin 101011010, iar m prin 010100101.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran numărul m.

Restricții și precizări

  • 0 ≤ n ≤ 1 000 000 000

Exemplu

Intrare

346

Ieșire

165
#include <bits/stdc++.h>

using namespace std;

int a[33] , cnt , f[33];

int main()
{
    int n , m = 0 , p = 1;
    cin >> n;
    if(n == 0) a[++cnt] = 0;
    while(n)
    {
       a[++cnt] = n % 2;
       n /= 2;
    }
    for(int i = 1 ; i <= cnt ; i++)
    {
        if(a[i]==0) f[i] = 1;
        else f[i] = 0;
    }
    for(int i = 1 ; i <= cnt ; i++)
    {
        m = m + p*f[i];
        p *= 2;
    }
    cout << m;
    return 0;
}
Comentarii

S-ar putea sa iti placa