设有n个正整数,将他们连接成一排,组成一个最大的多位整数
2017-10-17 20:40
232 查看
设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
如:n=3时,3个整数13,312,343,连成的最大整数为34331213。如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613。
当时看到这个的第一反应是要去从左到右比较每个数最高位的大小,
然后我的脑回路走到了去获取每个数的最高位去了,小弟拙见,在此抛砖引玉
public static int[] test(long []a,int n) { int[] count=new int ;//传入一个数组,长度 int[] length=new int ;//获取每个整数的长度 for(int i=0;i<n;i++) {//返回最高位 length[i]=String.valueOf(a[i]).length(); count[i]=(int) (a[i]/Math.pow(10,length[i]-1));// } return count; }
以上写的是一个获取最高位的函数(稍作修改也可以获取最高前k位),如果最高位相同获取最高前两位去比较,然后重点跑到了比较上
就要找到最高位相同的角标,再去比较数组里这几个数的最高前两位,如果还相同就继续比较以此类推,想了很久感觉很麻烦,总之就是我没实现(蓝瘦香菇,还想了字符串的模式匹配啥的bala的)
虽然在上边获取整数的位数时使用了将整数转化成字符串去获取长度但是还是没有为这个题get到关键点
将整数转换成字符串进行拼接,a+b和b+a之后转化成整数比较这两个数的大小问题,数组中的两两进行比较,后者大说明需要交换顺序,核心就是这个:
public static int compare(long num1,long num2){ String str1 = num1 + ""; String str2 = num2 + ""; int temp1 = Integer.parseInt(str1+str2); int temp2 = Integer.parseInt(str2+str1); return temp1 - temp2; }
总体代码如下:
import java.util.Scanner;
public class Main {
public static int compare(long num1,long num2){ String str1 = num1 + ""; String str2 = num2 + ""; int temp1 = Integer.parseInt(str1+str2); int temp2 = Integer.parseInt(str2+str1); return temp1 - temp2; }
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n= sc.nextInt(); //输入n个整数
long []a=new long
;
long temp=0;
for(int j=0;j<n;j++)
a[j]=sc.nextLong();
for(int x=0;x<n;x++)
for(int y=x+1;y<n;y++)
{
if(compare(a[x],a[y])<0)//判断条件是两个数拼接的两种情况的差
{
temp=a[x];
a[x]=a[y];
a[y]=temp;
}
}
for(int i = 0; i < n; i++){
System.out.print(a[i]);
}
}
}
排序也可以选择其他排序算法,但是Mark一下把整数转换成字符串的操作,使程序简洁了很多,也少饶了路。—–小弟拙见,请大家指教!
相关文章推荐
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
- 设有n个正整数,将他们连接成一排,组成一个最小的多位整数
- 求n个正整数连接成一排,组成一个最大的多位整数
- java题: 设有n个正整数,将它们联接成一排,组成一个最大的多位整数。例如:N=3时,3个整数13、312、343联成的最大整数为:34331213;
- 设有n个正整数 (n<=20), 将它们连接成一排, 组成一个最大的多位整数
- Java实现:n个正整数,将它们连接成一排,组成一个最大的多位整数。(输入:n(n个整数),依次输入n个整数)
- 设有n个正整数,将它们联接成一排,组成一个最小的多位整数
- n个正整数,联接成一排,组成一个最大(最小)的多位整数 python
- n个正整数,联接成一排,组成一个最小(最大)的多位整数
- n个正整数联接成一排,组成一个最小的多位整数
- 设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数
- n个正整数联接成一排,组成一个最小的多位整数
- 有一个数组,由正整数、负整数、零组成,求和最大的连续子数组
- 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 5
- 定义一个由整数组成的数组,然后输入一个整数X,如果X不在此数组中,返回小于X的最大数的位置i和大于X的最小数的位置j
- 贪心算法——n个数连接得到最小或最大的多位整数
- 返回一个整数数组中最大子数组的和(数组头尾连接)
- 猪八戒编程题2018_拼接N个整数成一个最大的多位整数
- 给定一个正整数和负整数组成的N*N矩阵,编写代码找出元素总和最大的子矩阵。