Bit to Byte Practice Problem

What could be the possible error in the code mentioned here? I am just not able to get the correct answer.

#include <bits/stdc++.h>
using namespace std;

#define NEWLINE "\n";
typedef long long ll;


int main()
{
    ios::sync_with_stdio(false);

    ll T;
    cin >> T;

    ll N;

    for (ll i = 0; i < T; i++)
    {
        cin >> N;
        ll time = N;

        ll bit = 0, nibble = 0, byte = 0, num = 0;
        static ll byteArr[3];

        if(time <= 26)
        {
            if(time <= 2)
                bit++;
            else if(time <=10 && time > 2)
                nibble++;
            else if(time <= 26 && time > 10)
                byte++;
        }
        else if(time > 26)
        {
            if(time % 26 == 0){
                num = pow(2, time/26);
                byte = num;
            }
            else
            {
                ll remainder = time % 26;
                num = pow(2, (time - remainder)/26);

                if(remainder >= 0 && remainder <= 2)
                    bit += num;
                else if(remainder > 2 && remainder <= 10)
                    nibble += num;
                else byte = num;
            }
        }
        byteArr[0] = bit;
        byteArr[1] = nibble;
        byteArr[2] = byte;

        cout << byteArr[0] << " " << byteArr[1] << " " << byteArr[2] << NEWLINE;
    }

    return 0;
}

I have covered all the test cases, even the edge ones, and still am getting a wrong answer. What could be the possible error in the code above?

When I input 26 the code will output (0 0 1), for 130 (0 0 32), for 140 (0 32 0), and for 1600
(0 0 2305843009213693952). What am I missing here?

Hi, @kartavyasharma

I may be wrong, but I suspect your issue is here…

        if(time % 26 == 0){
            num = pow(2, time/26);
            byte = num;
        }

…when time % 26 is 0, for example when time == 26 or 52, num should NOT be 2^(time/26). Currently this formula calculates that there are 2 bytes at t=26 and 4 at t=52, not the correct answers 1 and 2, respectively.

Thanks for pointing that out, I could have completely missed that. Much appreciated @sbatten1969 !

Then accept this answer, no? @kartavyasharma

1 Like