338
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