Submission

Status:
----------

Score: 0

User: Cmoss9

Problemset: C.Sort Number

Language: cpp

Time: 0.056 second

Submitted On: 2024-11-10 22:39:06

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int stringlength(char s[]) {
    int count = 0;
    while (s[count] != '\0') {
        count++;
    }
    return count;
}

int power(int base, int exp) {
    int result = 1;
    while (exp > 0) {
        if (exp % 2 == 1) result *= base;
        base *= base;
        exp /= 2;
    }
    return result;
}

int sum_of_divisors(int num) {
    int sum = 1; // 1 is always a divisor
    int sqrt_n = sqrt(num);
    for (int i = 2; i <= sqrt_n; i++) {
        if (num % i == 0) {
            sum += i;
            if (i != num / i) {
                sum += num / i;
            }
        }
    }
    return sum + num; // Adding the number itself
}

int compare(const void *a, const void *b) {
    return (*(int *)b - *(int *)a); // Sort in descending order
}

int main() {
    int n;
    scanf("%d", &n);

    int base[n];
    char num[n][100];
    int base10[n], sum[n];

    for (int i = 0; i < n; i++) {
        scanf("%d", &base[i]);
        scanf("%s", num[i]);

        base10[i] = 0;
        int len = stringlength(num[i]);

        for (int j = 0; j < len; j++) {
            int digit_value;
            if ('0' <= num[i][j] && num[i][j] <= '9') {
                digit_value = num[i][j] - '0';
            } else {
                digit_value = num[i][j] - '7';
            }
            base10[i] += digit_value * power(base[i], len - j - 1);
        }
        sum[i] = sum_of_divisors(base10[i]);
    }

    qsort(sum, n, sizeof(int), compare);

    for (int i = 0; i < n; i++) {
        printf("%d\n", sum[i]);
    }

    return 0;
}