```cpp
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<sstream>
using namespace std;
class Solution
{
public:
static bool cmp(string s1, string s2)
{
int i = 0, j = 0;
while(i < s1.size() && j < s2.size())
{
if(s1[i] == s2[j])
{
++ i;
++ j;
}
else
return s1[i] < s2[j];
}
if(i == s1.size() && j == s2.size())
return false;
if(i == s1.size() && j < s2.size())
return s1[i-1] <= s2[j];
else
return s1[i] <= s2[j-1];
}
string largest(vector<string>& nums)
{
sort(nums.rbegin(), nums.rend(), cmp);
string ans;
for(auto item : nums)
ans += item;
int i = 0;
for(i = 0; i < ans.size(); ++ i)
if(ans[i] != '0')
break;
return ans.substr(0+i) == "" ? "0" : ans.substr(0+i);
}
};
int main()
{
while(1)
{
string input;
string tmp = "";
getline(cin, input);
stringstream ss(input);
vector<string> vec;
while(getline(ss, tmp, ' '))
vec.push_back(tmp);
Solution so;
cout << "最大整数:" << so.largest(vec) << endl << endl;
}
return 0;
}
核心思路: 输入的数组元素处理成字符串类型数组 降序排列这个数组。但是要自定义cmp函数,以及处理特殊的输入是全0的情况
对于 4 46 => 464
对于 40 4=> 440
也就是出while循环时,要判断短的字符串他的上一位和长的字符串当前位的大小关系
如果循环结束条件是两个字符串一样长 应该返回false,虽然此时返回true也没有问题 但是标准规定要返回false 否则报错:"invalid operator <"