Prepared removing ipython.
This commit is contained in:
81
other/e030.c
Normal file
81
other/e030.c
Normal file
@@ -0,0 +1,81 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define DIGITS (6)
|
||||
#define BASE_TEN (100000)
|
||||
|
||||
uint32_t* get_digits(uint32_t n) {
|
||||
uint32_t* r = malloc(sizeof(uint32_t) * DIGITS);
|
||||
uint32_t base = BASE_TEN;
|
||||
for (size_t i = 0; i < DIGITS; i++) {
|
||||
r[i] = n / base;
|
||||
n = n % base;
|
||||
base /= 10;
|
||||
}
|
||||
return r;
|
||||
|
||||
}
|
||||
|
||||
uint32_t* get_power_four_lookup() {
|
||||
uint32_t* r = malloc(sizeof(uint32_t) * 10);
|
||||
r[0] = 0;
|
||||
r[1] = 1;
|
||||
r[2] = 2 * 2 * 2 * 2;
|
||||
r[3] = 3 * 3 * 3 * 3;
|
||||
r[4] = 4 * 4 * 4 * 4;
|
||||
r[5] = 5 * 5 * 5 * 5;
|
||||
r[6] = 6 * 6 * 6 * 6;
|
||||
r[7] = 7 * 7 * 7 * 7;
|
||||
r[8] = 8 * 8 * 8 * 8;
|
||||
r[9] = 9 * 9 * 9 * 9;
|
||||
return r;
|
||||
}
|
||||
|
||||
uint32_t* get_power_five_lookup() {
|
||||
uint32_t* r = malloc(sizeof(uint32_t) * 10);
|
||||
r[0] = 0;
|
||||
r[1] = 1;
|
||||
r[2] = 2 * 2 * 2 * 2 * 2;
|
||||
r[3] = 3 * 3 * 3 * 3 * 3;
|
||||
r[4] = 4 * 4 * 4 * 4 * 4;
|
||||
r[5] = 5 * 5 * 5 * 5 * 5;
|
||||
r[6] = 6 * 6 * 6 * 6 * 6;
|
||||
r[7] = 7 * 7 * 7 * 7 * 7;
|
||||
r[8] = 8 * 8 * 8 * 8 * 8;
|
||||
r[9] = 9 * 9 * 9 * 9 * 9;
|
||||
return r;
|
||||
}
|
||||
|
||||
bool is_representable(uint32_t number, uint32_t* lookup) {
|
||||
uint32_t* digits = get_digits(number);
|
||||
uint32_t digit_sum = 0;
|
||||
for (size_t i = 0; i < DIGITS; i++)
|
||||
digit_sum += lookup[digits[i]];
|
||||
free(digits);
|
||||
if (number == digit_sum)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
void print_digits(uint32_t* digits) {
|
||||
for (size_t i = 0; i < DIGITS; i++) {
|
||||
printf("%u", digits[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argn, char** argv) {
|
||||
uint32_t* lookup = get_power_five_lookup();
|
||||
uint32_t sum = 0;
|
||||
for (uint32_t n = 10; n < 300000; n++)
|
||||
if (is_representable(n, lookup)) {
|
||||
printf("%u\n", n);
|
||||
sum += n;
|
||||
}
|
||||
printf("Sum: %d\n", sum);
|
||||
free(lookup);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user