1. 程式人生 > >待字閨中之構造最大數分析

待字閨中之構造最大數分析

stream sprint amp gnu i++ += 最大 str char

給定僅僅包括正數的數組,給出一個方法,將數組中的數拼接起來,得到的數,是最大的。 比如: [4, 94, 9, 14, 1] 拼接之後,所得最大數為:9944141

分析

我們能夠將兩個數字,作為一個總體。進行比較。然後一次排序,就得到了結果。給定樣例:5,54,56

比較5和54,實際上就是比較545和554哪個大

比較5和56,實際上就是比較556和565哪個大

比較54和56。實際上就是比較5456和5654哪個大

那我們對快排程序做一下變化,當兩個數字a和b進行比較時,比較的是ab和ba兩個數字的大小就可以。

僅僅是比較發生了變化。剩下的和快排都是一樣的。為了防止溢出。我們把兩個數字放到字符串中進行比較。詳細代碼例如以下:

char num1[30],num2[30];
bool cmp(int value1,int value2)
{
	char a[15],b[15];
	sprintf(a,"%d",value1);
	sprintf(b,"%d",value2);
	strcpy(num1,a);//把兩個數連接起來放到數組中進行比較
	strcat(num1,b);
	strcpy(num2,b);
	strcat(num2,a);
	int res = strcmp(num1,num2);
	if(res >= 0)return true;
	return false;
}
string MakeBigNum(vector<int>& data)
{
	int length = data.size(),i;
	if(length <= 0)return NULL;
	sort(data.begin(),data.end(),cmp);//進行快排
	string res = "";
	for(i=0;i<length;i++)
	{
		stringstream ss;
		ss << data[i];
		res += ss.str();
	}
	return res;
}




待字閨中之構造最大數分析