Find Largest Number formed from an Array [PayTm , Amazon]

Problem:A list of non negative integers will be provided, arrange the numbers in such a way that they form the largest number possible.

Example:

From a list : 9 30 31 4 10 ; Largest number formed : 94313010.

Link

#include <stdio.h>
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>
using namespace std;
//vector<string> vb;
string vb[105];
int n;

bool cmp(string a,string b)
{
    string p=a;
    p.append(b);
    string q=b;
    q.append(a);
    for(int i=0;i<p.size();i++)
    {
        if((p[i]-'0')<(q[i]-'0'))
        return 1;//if a<b
        if((p[i]-'0')>(q[i]-'0'))
        return 0;//if b<a
    }
    return 1;
    
}
void _sort()
{
    string tmp;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-1;j++)
        {
            if(cmp(vb[j],vb[j+1])==0)
            {
                tmp=vb[j];
                vb[j]=vb[j+1];
                vb[j+1]=tmp;
            }
        }
    }
}
int main() {
	//code
	int t,a;
	string crnt,prev;
	scanf("%d",&t);
	while(t--)
	{
	    scanf("%d",&n);
	    for(int i=0;i<n;i++)
	    {
	        scanf("%d",&a);
	        prev="";
	        if(a==0)
	        prev.append(1u,'0');
	        else
	        {
	            prev="";
    	        crnt="";
    	        while(a)
    	        {
    	            crnt.append(1u,(a%10)+'0');
    	            a/=10;
    	            crnt.append(prev);
    	            prev=crnt;
    	            crnt="";
    	        }
	        }
	        vb[i]=prev;
	    }
	    _sort();
        for(int i=n-1;i>=0;i--)
            cout<<vb[i];
    	cout<<"\n";
	}
	return 0;
}

 

 

Comments are closed.