题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路:
sort()函数的使用方法:
- 含有两个参数:sort(首地址,尾地址);//默认是从小到大排列的
- 含有三个参数:sort(首地址,尾地址,排序方法);//一排序方式排列的
注:to_string方法是将int型转为string型
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
static bool cmp(int a, int b) {
string A = "";
string B = "";
A += to_string(a);
A += to_string(b);
B += to_string(b);
B += to_string(a);
return A < B;
}
string PrintMinNumber(vector<int> numbers) {
string answer = "";
//排序规则:“从小到大”:将最高位从小到大排列,如果相等,就次高位按从小到大排列,以此类推。
sort(numbers.begin(), numbers.end(), cmp);
for (int i = 0;i < numbers.size();i++) {
answer += to_string(numbers[i]);
}
return answer;
}
int main() {
vector<int> arr;
int temp;
while (cin >> temp) {
arr.push_back(temp);
if (cin.get() == '\n') {
break;
}
}
string res = PrintMinNumber(arr);
cout << res << endl;
return 0;
}