PE036_c


// Solution to Project Euler problem #36

// palindromic in base10 and base2

#include <stdio.h>

int rev10(int num);

int rev2(int num);

main() {

    int sum=0, i;

    for (i=1; i<1000000; i+=2) { // skip evens since they have a leading zero in at least binary

        if (i==rev10(i) && i == rev2(i)) {

            sum += i;

            printf("New solution: %d on %d\n", sum, i);

        }

    }

}

int rev10(int num) {

    int newn=0;

    while (num) {

        newn *= 10; // shift already reveresed digits

        newn += num%10; // put new digit on end

        num /=10; // pull left digits in

    }

    return newn;

}

int rev2(int num) {

    int newn = 0;

    while (num) {

        newn *= 2; // shift already reversed digits

        newn += num & 1; // put new digit on end

        num /= 2; // pull left digits in

    }

    return newn;

}