设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
Sample Input
3
13 312 343
4
7 13 4 246
3
321 32 3
3
324 32 3
Sample Output
34331213
7424613
332321
332432 展开
程序如下:
var n,i,j,k,min:longint;
a:array[0..100]of string;
ch1:char;
st1,now1,now2,st:string;
begin
readln(n);
for i:=1 to n do
begin
readln(st);
a[i]:=st;
end;
for i:=1 to n-1 do
for j:=i+1 to n do
begin
now1:=a[j];now2:=a[i];
if length(a[j])>length(a[i]) then min:=length(a[i]) else min:=length(a[j]);
for k:=1 to min do
if now1[k]>now2[k] then
begin
st1:=a[j];a[j]:=a[i];a[i]:=st1;
break;
end;
end;
for i:=1 to n do
write(a[i]);
writeln;
end
扩展资料:
任何一个满足下列条件的非空集合叫做正整数集合,记作N*。如果
Ⅰ 1是正整数;
Ⅱ 每一个确定的正整数a,都有一个确定的后继数a' ,a'也是正整数(数a的后继数a‘就是紧接在这个数后面的整数(a+1)。例如,1‘=2,2’=3等等。);
Ⅲ 如果b、c都是正整数a的后继数,那么b = c;
Ⅳ 1不是任何正整数的后继数;
Ⅴ 设S⊆N*,且满足2个条件(i)1∈S;(ii)如果n∈S,那么n'∈S。那么S是全体正整数的集合,即S=N*。(这条公理也叫归纳公理,保证了数学归纳法的正确性)
皮亚诺公理对N*进行了刻画和约定,由它们可以推出关于正整数的各种性质。
参考资料来源:百度百科-多位整数
参考资料来源:百度百科-正整数
#include <stdio.h>
int CompareInt(int a,int b)
{
int a1=a,b1=b,la=10,lb=10;
while(a/la)
{
la*=10;
}
while(b/lb)
{
lb*=10;
}
return (a*lb+b)-(b*la+a);
}
int main()
{
int i,j,n;
int data[20],temp;
while(1)
{
scanf("%d",&n);
if(n<=0||n>20) break;
for(i=0;i<n;i++)
{
scanf("%d",&data[i]);
}
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(CompareInt(data[i],data[i+1])<0)
{
temp=data[i+1];
data[i+1]=data[i];
data[i]=temp;
}
}
for(i=0;i<n;i++)
{
printf("%d",data[i]);
}
printf("\n");
}
return 0;
}
找出最大的那个数:从高位到地位,如果第一位相同,则看第二位;如果某一位一个数字没有而另一个数字有,则有的数字的这一位与没有这位的数字的上一位相比较。
不明白的话可以给你代码。
最后结果有可能很长,超出计算机能表示的数字长度,所以转化成字符串表示比较保险,且字符串比较大小适用于这个题目
字符串比较大小规则:从左往右比较相同位的ascii2码,得到不同值结束,ascii2码高的字符串大。输出结果用字符串输出就行
1.获取n个正整数
2.用itoa()函数将其转化成字符串,存于字符串数组中
3.用冒泡排序比较字符串数组由大到小排列
4.把字符串数组的内容从头到尾转移到一个字符串中
5.输出字符串