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;
}