设有n个正整数,将他们连接成一排,组成一个最大的多位整数。

 我来答
A我就是野狼
推荐于2018-07-09
知道答主
回答量:7
采纳率:100%
帮助的人:4122
展开全部

方法就是把数字做为字符串来排序,排序的比较原则是:两个数字串A,B,如果AB < BA,则A < B

首先证明方法正确性:如果A小于其他所有数字串,则A应该在最前面

假设某个A在中间的连接小于以A开头的连接,则为.....MA....,因为AM < MA,所以AM.... < MA....,

所以把MA换成AM会变小。同理可知把A移到开头最小。

参考下面这个链接

然后具体比较方法:比较字符串的连接

ab|adcde    31|312

abcde|ab    312|31

拿abcdeab和abcdeab比较    31312和31231比较

#include<iostream>
#include<cstring>
#include<vector>
#include <algorithm>
using namespace std;
bool cmp(const string &x,const string &y)
{
return (x+y).compare(y+x)<0;
}
int main()
{
vector<string> v;
int a[]={55,31,312,33};
char str[100];
for(int i=0;i<sizeof(a)/sizeof(int);i++)
{
itoa(a[i],str,10);//将整十进制整数转化为字符串存放在str中
v.push_back(str);
}
sort(v.begin(),v.end(),cmp);
for (int k=0;k<v.size();k++)
{
cout<<v[k]<<endl;
}
for(int j=1;j<v.size();j++)
{
v[0].append(v[j]);
}
int result=atoi(v[0].c_str());
cout<<"结果"<<result<<endl;
return 0;
}

主要思想:把整数变成字符串,然后插入vector中,使用sort算法排序,自定义排序方式,即可!

法二

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string num;
vector<string> v;
while (cin >> num)
{
v.push_back(num);
}
sort(v.begin(), v.end(), [](const string& s1, const string& s2) -> bool {
return (s1 + s2).compare(s2 + s1) < 0;
});
for_each(v.begin(), v.end(), [](string s) { cout << s; });
cout << endl;
system("pause");
return 0;
}

金色潜鸟
2018-07-09 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5626万
展开全部
当它们是字符串,依次读入,计算字符串长度,累加每个串的长度,就得总长度了。
c 语言程序例子:
#include <stdio.h>
int main(){
int i,n,L=0;
static char s[20];
printf("input n:\n"); scanf("%d",&n);
printf("input %d positive int data:\n",n);
for (i=0;i<n;i++){ scanf("%s",s);L=L+strlen(s);};
printf("max %d digits\n",L);
return 0;
}

输入例子:
input n:
5
input 5 positive int data:
1 23 45 678 90
max 10 digits
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
想请教你们哈
2018-07-09 · TA获得超过3943个赞
知道大有可为答主
回答量:3770
采纳率:84%
帮助的人:384万
展开全部
把这 n 个正整数由大到小从左到右连接成一排就是。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CJJohn
2018-07-09 · Persistence is harder than eff...
CJJohn
采纳数:475 获赞数:1362

向TA提问 私信TA
展开全部
就按照从大到小的顺序排起来就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
武全2345
高粉答主

2018-07-09 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:3.5万
采纳率:89%
帮助的人:2408万
展开全部
把n个正整数按照从大到小的顺序排列就得啦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式