拼接数字(知识点:string的使用和sort的cmp)

本文介绍了一种算法,用于解决将多个正整数按特定顺序拼接以形成最小可能数值的问题。通过自定义比较函数并使用排序算法,确保了数字以最优方式组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拼接数字

Time Limit: 2000/1000ms (Java/Others)

Problem Description:

 给定一个正整数数组,现在把数组所有数字都拼接成一个大数字,如何使得拼接后的数字最小。

Input:

输入包含多组测试数据,每组数据首先输入一个整数n(1<=n<=10000),接下来有n个整数a[i](1<=a[i]<=10^5);

Output:

对于每组数据,输出拼接后最小的数字。

Sample Input:

3
3 32 321

Sample Output:

321323


代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool cmp(int a,int b)//注意:a是数组中的后一个元素,b是数组中的前一个元素,return true代表交换这两个元素
{
    string aa;//定义一个string
    string bb;
    while(a)
    {
        aa+=a%10;//string不能用类似数组x[0] = y这种方法赋值,只能用加法,如给一个string x加上一个元素y,则x+=y
        a/=10;
    }
    while(b)
    {
        bb+=b%10;
        b/=10;
    }
    reverse(aa.begin(),aa.end());//对string数组进行翻转。
    reverse(bb.begin(),bb.end());
    return (bb+aa) > (aa+bb);
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int a[n];
        for(int i = 0;i < n;i++)
            scanf("%d",&a[i]);
        sort(a,a+n,cmp);
        for(int i = 0;i < n;i++)
            printf("%d",a[i]);
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值