How to check if a number is evil number (binary representation contains even number of 1) in C

1 Answer

0 votes
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

void toBinary(int number, char binaryNumber[]) {
    int i = 0;

    while (number != 0) {
        binaryNumber[i] = (number % 2) + '0';
        i++;
        number /= 2;
    }
}

int countNumberOfOne(char binaryNumber[]) {
    int length = strlen(binaryNumber);

    int count = 0;
    char ch;

    for (int i = 0; i < length; i++) {
        ch = binaryNumber[i];
        if (ch == '1') {
            count++;
        }
    }

    return count;
}

bool checkEvilNumber(int number) {
    char binaryNumber[17] = "";

    toBinary(number, binaryNumber);

    printf("%d = %s = ", number, binaryNumber);

    return (countNumberOfOne(binaryNumber) % 2 == 0) ? true : false;
}

int main(void) {
    int number = 23;
    printf("%d\n", checkEvilNumber(number));

    number = 9863;
    printf("%d\n", checkEvilNumber(number));

    return 0;
}




/*
run:

23 = 11101 = 1
9863 = 11100001011001 = 0

*/

 



answered Nov 25, 2023 by avibootz
...