#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;
    assert(limit >= 0);

    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("sum = %d\n", sum);
    printf("reversed = %d\n", reverse_digits(sum));
    printf("sorted = %d\n", sort_digits(sum));
    
    UNUSED(argc);
    UNUSED(argv);
    return 0;
}