#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
Test Cases
Test Results
Input
20548
Expected Output
202