拼数

拼数

http://www.nowcoder.com/questionTerminal/bf617f7a721b4df3874b79169e692d96

解题思路

先把整数化成字符串,然后再比较a+b和b+a,如果a+b>b+a,就把a排在b的前面,反之则把a排在b的后面,最后输出排序后的字符串,即可得到最大的整数(如果求最小的整数,则从小到大排序)。

举例说明:a=‘123’,b=‘71’,a+b='12371',b+a=‘71123’,所以a+b<b+a,将b排在前面

注意:正常的字符串存在比较缺陷,如:A=’321’,B=’32’,按照标准的字符串比较规则因为A>B,所以A+B > B+A ,而实际上’32132’ < ’32321’。

具体步骤如下:
1.获取n
2.依次获取n个正整数,将整数转换为字符串:声明字符串数组a[n],将获取到的正整数存入数组a中,即可实现正整数到字符串的转换
3.自定义排序函数:如果a+b>b+a,则把a排在前面,否则将b排在前面(对于字符串a、b,a+b表示连接两个字符串形成一个新串)
4.从大到小输出排序后的字符串即可得到最大的整数

#include<iostream>
#include<algorithm>
using namespace std;
//自定义排序函数
bool cmp(string a,string b)
{
    return a+b>b+a;//如果a+b>b+a,则把a排在前面,否则将b排在前面
}
int main()
{
    int n;
    cin>>n;
    string s[n];
    //获取n个正整数,存入字符串数组a中
    for (int i = 0; i < n; ++i)
    {
        cin>>s[i];
    }

    sort(s,s+n,cmp);
    for (int i = 0; i < n; ++i)
    {
        cout<<s[i];
    }
    return 0;
}
全部评论

相关推荐

56 1 评论
分享
牛客网
牛客企业服务