#include #include #define LOOP_COUNT 1000000 #define EXPECTED_CHECKSUM 3875011 struct array_record { int32_t digits[8]; }; static int32_t configured_loop_count(void) { int32_t value = LOOP_COUNT; if (scanf("%d", &value) != 1 || value <= 0) { return LOOP_COUNT; } return value; } static struct array_record make_record(void) { return (struct array_record){.digits = {3, 1, 4, 1, 5, 9, 2, 6}}; } static int32_t array_struct_field_loop(int32_t limit) { struct array_record record = make_record(); int32_t i = 0; int32_t acc = 11; while (i < limit) { acc = acc + record.digits[i % 8]; acc = acc > 1000000000 ? acc - 1000000000 : acc; i = i + 1; } return acc; } int main(void) { int32_t result = array_struct_field_loop(configured_loop_count()); printf("%d\n", result); return result == EXPECTED_CHECKSUM ? 0 : 1; }