#ifdef _MSC_VER
# pragma warning(disable: 4996)
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define UNUSED(x) (void)(x)
#define MAX_N 1000
int sum_multiples(int limit)
{
int i, sum;
sum = 0;
for (i = 3; i < limit; i += 3)
if (i % 15 != 0) sum += i;
for (i = 5; i < limit; i += 5)
sum +=i;
return sum;
}
int reverse_digits(int n)
{
int x;
x = 0;
do
{
x = (x * 10) + n % 10;
} while (n /= 10);
return x;
}
int cmp_digits(const void *v1, const void *v2)
{
return *(int *)v1 - *(int *)v2;
}
int sort_digits(int n)
{
size_t i, cnt;
int c, digits[10];
i = cnt = 0;
do
{
digits[i++] = n % 10;
} while (n /= 10);
cnt = i;
qsort(digits
, cnt
, sizeof(*digits
), cmp_digits
);
c = 0;
for (i = 0; i < cnt; ++i)
c = (c * 10) + digits[i];
return c;
}
int main(int argc, const char *argv[])
{
unsigned int sum = sum_multiples(MAX_N);
printf("reversed = %d\n", reverse_digits
(sum
)); printf("sorted = %d\n", sort_digits
(sum
));
UNUSED(argc);
UNUSED(argv);
return 0;
}
I2lmZGVmIF9NU0NfVkVSCiMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ5OTYpCiNlbmRpZgoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CgojZGVmaW5lIFVOVVNFRCh4KSAodm9pZCkoeCkKCiNkZWZpbmUgTUFYX04gMTAwMAoKaW50IHN1bV9tdWx0aXBsZXMoaW50IGxpbWl0KQp7CiAgICBpbnQgaSwgc3VtOwogICAgYXNzZXJ0KGxpbWl0ID49IDApOwoKICAgIHN1bSA9IDA7CiAgICBmb3IgKGkgPSAzOyBpIDwgbGltaXQ7IGkgKz0gMykKICAgICAgICBpZiAoaSAlIDE1ICE9IDApIHN1bSArPSBpOwoKICAgIGZvciAoaSA9IDU7IGkgPCBsaW1pdDsgaSArPSA1KQogICAgICAgIHN1bSArPWk7CgogICAgcmV0dXJuIHN1bTsKfQoKaW50IHJldmVyc2VfZGlnaXRzKGludCBuKQp7CiAgICBpbnQgeDsKCiAgICB4ID0gMDsKICAgIGRvCiAgICB7CiAgICAgICAgeCA9ICh4ICogMTApICsgbiAlIDEwOwogICAgfSB3aGlsZSAobiAvPSAxMCk7CiAgICByZXR1cm4geDsKfQoKaW50IGNtcF9kaWdpdHMoY29uc3Qgdm9pZCAqdjEsIGNvbnN0IHZvaWQgKnYyKQp7CiAgcmV0dXJuICooaW50ICopdjEgLSAqKGludCAqKXYyOwp9CgppbnQgc29ydF9kaWdpdHMoaW50IG4pCnsKICAgIHNpemVfdCBpLCBjbnQ7CiAgICBpbnQgYywgZGlnaXRzWzEwXTsKCiAgICBpID0gY250ID0gMDsKICAgIGRvCiAgICB7CiAgICAgICAgZGlnaXRzW2krK10gPSBuICUgMTA7CiAgICB9IHdoaWxlIChuIC89IDEwKTsKCiAgICBjbnQgPSBpOwogICAgcXNvcnQoZGlnaXRzLCBjbnQsIHNpemVvZigqZGlnaXRzKSwgY21wX2RpZ2l0cyk7CgogICAgYyA9IDA7CiAgICBmb3IgKGkgPSAwOyBpIDwgY250OyArK2kpCiAgICAgICAgYyA9IChjICogMTApICsgZGlnaXRzW2ldOwoKICAgIHJldHVybiBjOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqYXJndltdKQp7CiAgICB1bnNpZ25lZCBpbnQgc3VtID0gc3VtX211bHRpcGxlcyhNQVhfTik7CiAgICBwcmludGYoInN1bSA9ICVkXG4iLCBzdW0pOwogICAgcHJpbnRmKCJyZXZlcnNlZCA9ICVkXG4iLCByZXZlcnNlX2RpZ2l0cyhzdW0pKTsKICAgIHByaW50Zigic29ydGVkID0gJWRcbiIsIHNvcnRfZGlnaXRzKHN1bSkpOwogICAgCiAgICBVTlVTRUQoYXJnYyk7CiAgICBVTlVTRUQoYXJndik7CiAgICByZXR1cm4gMDsKfQ==