Here is the question:
Comparing two numbers written in index form like 2^11 and 3^7 is not difficult, as any calculator would confirm that 2^11=2048<3^7=2187.
However, confirming that 632382^518061>519432^525806 would be much more difficult, as both numbers contain over three million digits.
You are given N base exponent pairs, each forming a large number you have to find the Kth smallest number of them. K is 1−indexed.
Input Format First line containts an integer N, number of base exponent pairs. Followed by N lines each have two space separated integers B and E, representing base and exponent. Last line contains an integer K, where K<=N Constraints 1≤N≤105 1≤K≤N 1≤B≤109 1≤E≤109 No two numbers are equal.
Here is my code:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int N,i = 0,k,j=0,x,m;
    long long int *arr,*arr2,*arr3;
    cin >> N;
    arr = (long long int *)malloc(sizeof(long long int)*2*N);
    arr2 = (long long int *)calloc(N,sizeof(long long int));
    arr3 = (long long int *)calloc(N,sizeof(long long int));
    x = 2*N;
    while(x>0)
    {
        cin >> arr[i];
        i++;
        x--;
    }
    cin >> k;
    for(i=0;i<2*N;i+=2)
    {
        arr2[j] = pow(arr[i],arr[i+1]);
        j++;
    }
    arr3 = arr2;
    sort(arr2,arr2+N);
    for(i=0;i<N;i++)
    {
        if(arr3[i] == arr2[k-1])
        {
            m = i;
            break;
        }
    }
    cout << arr[2*m] << " " << arr[2*m + 1];
    return 0;
}
The program works for small numbers only, can't make it work for large numbers. what to do?
 
     
     
    