Submission

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

Score: 0

User: mydKN

Problemset: C.Sort Number

Language: c

Time: 0.035 second

Submitted On: 2024-10-15 07:55:52

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

int toten(char str[], int base){
    int sum = 0;
    int len = strlen(str);
    int power = 1;
    for(int i=len-1;i>=0;--i){
        if(str[i] >= 'A' && str[i] <= 'Z') sum += (str[i] - 55) * power;
        else sum += (str[i] - '0') * power;
        power *= base;
    }
    return sum;
}

int solve(int n){
    int factor = 0;
    for(int i=1; i*i <= n; ++i){
        if(n % i == 0) {
            factor += i;
            if(n / i != i) factor += n/i;
        }
    }
    return factor;
}

int comp(const void *a, const void *b){
    return *(int*)b - *(int*)a;
}

int main(){
    int n;
    scanf("%d", &n);
    int arr[n];
    int cnt = 0;
    for(int i=0;i<n;++i){
        int from;
        scanf("%d", &from);
        int num;
        if(from != 10){
            char str[1000];
            scanf("%s", str);
            num = toten(str, from);
        }
        else{
            scanf("%d", &num);
        }
        arr[cnt++] = solve(num);
    }
    qsort(arr, n, sizeof(int), comp);
    for(int i=0;i<n;++i){
        printf("%d\n", arr[i]);
    }
}