#include <stdio.h>
#include <stdint.h>
#include<math.h>
uint8_t compress_bits(uint16_t val) {
// Your logic here
int arr[16];
int index=0;
while(val>0){
int y=val%2;
arr[index]=y;
val/=2;
index++;
}
if(index<16){
for(int i=0;i<16-index;i++){
arr[index]=0;
index++;
}
}
int w[16],temp=0;
for(int i=index-1;i>=0;i--){
w[temp]=arr[i];
temp++;
}
int dec=0,count=0;
for(int i=0;i<temp;i++){
if(i%2==0){
dec+=arr[i]*pow(2,count);
count++;
}
}
return dec;
}
int main() {
uint16_t val;
scanf("%hu", &val);
uint8_t result = compress_bits(val);
printf("%u", result);
return 0;
}
simple binary to decimial conversion and array concepts helped me to solve the problem
Input
20548
Expected Output
202