50212. Bits Swapping

難度:3/5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <ctype.h>

int cnt_1(int arr[], int start, int finish){
int cnt = 0;
for(int i = start; i < finish; i++){
if(arr[i] == 1) cnt++;
}
return cnt;
}


void x(int arr[], int start, int finish){
if(start + 1 == finish) return;

int mid = (start + finish) / 2;
int cnt = cnt_1(arr, start, finish);
if(cnt % 2 == 1){
for(int i = start, j = mid; i < mid; i++, j++){
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}

x(arr, start, mid);
x(arr, mid, finish);
}

int main(){
uint32_t n;
scanf("%u", &n);
int arr[32] = {0};
for(int i = 0; i < 32; i++){
arr[i] = ((n >> 31 - i) & 1);
}

x(arr, 0, 32);

uint32_t f = 0;
for(int i = 0; i < 32; i++){
if(arr[i] == 1){
f |= ((uint32_t)1 << (31 - i));
}
}
printf("%u\n", f);
}


50212. Bits Swapping
https://aaronlin1229.github.io/judgegirl_50212/
Author
Akizumi
Posted on
July 17, 2023
Licensed under