Submission

Status:
PPPPPPPPPP

Score: 100

User: Monasm

Problemset: C.Sort Number

Language: cpp

Time: 0.065 second

Submitted On: 2024-10-15 00:23:42

#include<bits/stdc++.h> 
#define int long long 
  
using namespace std; 
  
int convertToBase10(const string& num, int base) { 
    int result = 0; 
    int power = 1; 
    for (int i = num.length() - 1; i >= 0; --i) { 
        char c = num[i]; 
        int digit; 
        if (isdigit(c)) digit = c - '0'; 
        else digit = c - 'A' + 10ll; 
        result += digit * power; 
        power *= base; 
    } 
    return result; 
} 
  
int sumOfDivisors(int num) { 
    int sum = 0; 
    for (int i = 1; i <= sqrt(num); ++i) { 
        if (num % i == 0) { 
            sum += i; 
            if (i != num / i) sum += num / i; 
        } 
    } 
    return sum; 
} 
  
int32_t main() { 
    cin.tie(nullptr)->sync_with_stdio(false); 
    int T; cin >> T; 
    vector<pair<int, string>> numbers(T); 
  
    for (int i = 0; i < T; ++i) { 
        int base; 
        string number; 
        cin >> base >> number; 
        numbers[i] = {base, number}; 
    } 
  
    vector<pair<int, int>> results; 
    for (const auto& p : numbers) { 
        int base = p.first; 
        string number = p.second; 
        int base10Num = convertToBase10(number, base); 
        int sumDivisors = sumOfDivisors(base10Num); 
        results.push_back({sumDivisors, base10Num}); 
    } 
  
    sort(results.rbegin(), results.rend()); 
  
    for (const auto& res : results) cout << res.first << '\n'; 
}