设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343,连成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613
问题:
输入:N ,N个数
输出:连接成的多位数
解题思路:
1、用冒泡法,每一次选出题大的放到前面去
2、在比较时,不是简单的字符串的比较,要短的要循环比较
#include <iostream>
#include <string>
#include <list>
using namespace std;
int compare_str(string str1,string str2);
void power( list<string>&numput ,list<string>&numout );
int main()
{
int n;
list<string> numput,numout;
list<string>::iterator it;
cout << "请输入整数的个数,回车结束 n=";
cin>> n;
cout<<"请输入"<< n <<"个整数,回车结束" <<endl ;
string temp;
for(int i=0;i<n;i++)
{
cin>> temp;
numput.push_back(temp);
}
power(numput ,numout);
cout << "最后整合的结果为:";
for(it = numout.begin();it!=numout.end();it++)
cout<< *it ;
cout<<endl ;
system("pause");
return 0;
}
void power( list<string>&numput ,list<string>&numout )
{
while(!numput.empty())
{
list<string>::iterator it = numput.begin();
string maxstr = *it;
list<string>::iterator maxflag = numput.begin();
for(;it != numput.end();it++)
{
string str = *it ;
if(compare_str(maxstr,str)<0)
{
maxstr = str ;
maxflag = it;
}
}
numout.push_back(maxstr);
numput.erase(maxflag);
}
}
//重写string的compare方法
int compare_str(string str1,string str2)
{
int len1 = str1.size();
int len2 = str2.size();
int i =0;
while((i<len1) || (i<len2)) //短的字符串可以循环进行比较
{
if(str1[i%len1] > str2[i%len2])
return 1;
if(str1[i%len1] < str2[i%len2])
return -1;
i++;
}
return 0;
}