C++程序 将给定数字排列成最大的数字
在实际开发中,我们可能会遇到需要将给定数字排列成最大的数字的情况,比如说需要对电话号码进行排序,那么本文就来分享一下如何使用C++语言实现这个功能。
解题思路
要求将给定数字排列成最大的数字,其实就是要把数字从大到小排序,但排序时需要特别注意数字的位数,例如55和555,显然555更大。所以我们需要自定义一种排序规则,将数字排列成最大的数字。
我们可以将所有数字转换成字符串,然后对字符串进行排序。比如说我们有3个数字:20,10,9,转换成字符串就是”20″,”10″,”9″。然后对这些字符串进行排序,排序规则为:对于2个字符串a,b,如果将字符串a放在字符串b前面能够使得排序后的数字更大,那么就将a放在b前面。举个例子,对于字符串”20″和”10″,”10″放在前面排列成的数字更大,因为在整数中,1比2小,这个同理于字符串。
举个例子,假设我们有一个数组a,它包含了四个数字:
int a[4] = {20, 10, 9, 200};
我们可以将它们转换成字符串,然后排序:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
bool cmp(string a, string b) {
return a+b > b+a;
}
string largestNumber(vector<int>& nums) {
int n = nums.size();
vector<string> strs(n);
for (int i = 0; i < n; i++) {
strs[i] = to_string(nums[i]);
}
sort(strs.begin(), strs.end(), cmp);
string ans = "";
for (int i = 0; i < n; i++) {
ans += strs[i];
}
if (ans[0] == '0') {
return "0";
}
return ans;
}
int main() {
vector<int> nums;
nums.push_back(20);
nums.push_back(10);
nums.push_back(9);
nums.push_back(200);
cout << largestNumber(nums) << endl;
return 0;
}
上述代码首先定义了一个 cmp
函数,用于作为排序的规则。然后定义了 largestNumber
函数,其中使用了 to_string
将整数转换成字符串,然后使用 sort
函数进行排序,并将排序完成后得到的字符串按顺序拼接起来组成最大的数字。最后,在返回字符串之前,需要判断第一个字符是否为0,如果是,就返回 “0”,因为不能出现前导0。
完整代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
bool cmp(string a, string b) {
return a+b > b+a;
}
string largestNumber(vector<int>& nums) {
int n = nums.size();
vector<string> strs(n);
for (int i = 0; i < n; i++) {
strs[i] = to_string(nums[i]);
}
sort(strs.begin(), strs.end(), cmp);
string ans = "";
for (int i = 0; i < n; i++) {
ans += strs[i];
}
if (ans[0] == '0') {
return "0";
}
return ans;
}
int main() {
vector<int> nums;
nums.push_back(20);
nums.push_back(10);
nums.push_back(9);
nums.push_back(200);
cout << largestNumber(nums) << endl;
return 0;
}
结论
本文介绍了如何使用C++语言将给定数字排列成最大的数字。在排列时,需要特别注意数字的位数,然后自定义排序规则,使用字符串对数字进行排序,并将排序完成后的字符串按顺序拼接起来组成最大的数字。最后需要注意判断第一个字符是否为0,如果是则返回 “0”。