如何将数字数组连接成一个数字

时间:2013-09-05 02:42:53

标签: java arrays concatenation

我正在尝试使用任意长度的数组,并将其连接成一个数字而不添加它。例如,如果我有一个如下的数组

[ 1, 7, 12, 16, 3, 8]

我想要一个等于17121638但不等于47的变量。

我应该接受字符串输入并将其更改为int而不在整个输入本身上使用Interger.parseInt()

这是我目前的尝试:

public static String toNum(String input) {
    String [] charArray = new String [input.length()];
    int [] parsedInput = new int [input.length()];
    for(int i; i < input.length(); i++){
        charArray[i] = input.substring(i);          
    }
    for(int c; c < charArray.length; c++){
        parsedInput[c] = Integer.parseInt(charArray[c]);            
    }

9 个答案:

答案 0 :(得分:3)

试试这个:

int[] nums = { 1, 7, 12, 16, 3, 8 };

StringBuilder strBigNum = new StringBuilder();
for (int n : nums)
    strBigNum.append(n);

long bigNum = 0;
long factor = 1;
for (int i = strBigNum.length()-1; i >= 0; i--) {
    bigNum += Character.digit(strBigNum.charAt(i), 10) * factor;
    factor *= 10;
}

现在bigNum变量包含值17121638;在这种情况下,使用字符串更容易。请注意,如果输入数组太大(或数字太大),结果值将不适合long

答案 1 :(得分:1)

尝试考虑最左边数字的索引如何与你想要达到的最终数字中的10的幂相关联。例如:拥有[1, 2, 3, 4]数组应该生成整数1234。 1000的基数10的幂如何与数组的长度和1的索引?

相关

我认为这是一个问题,因为我觉得这是学校的家庭作业问题。

答案 2 :(得分:1)

ÓscarLópez的解决方案的变体,不使用任何解析(如所要求的问题):

public class BigNum {
    public static void main(String[] args) {
        int[] nums = {1, 7, 12, 16, 3, 8};
        System.out.println(concatNums(nums));
    }

    public static long concatNums(int[] nums) {
        long result = 0;
        long multiplier = 1;
        for (int i = nums.length; i > 0; --i) {
            int num = nums[i - 1];
            while (num != 0) {
                result += multiplier * (num % 10);
                num /= 10;
                multiplier *= 10;
            }
        }
        return result;
    }
}

如果数组包含0,这将无法正常工作。如果这很重要,请告诉我,我会调整算法以适应它。

答案 3 :(得分:1)

通过join方法将数字加在一起-这将为您提供一个字符串,然后通过Number函数将其转换为数字。 您可以简单地运行:

    var arr = [ 1, 7, 12, 16, 3, 8];
    var num = arr.join('');
    Number(num);

答案 4 :(得分:0)

首先,你想要返回一个int - 而不是一个String!

第二 - 从技术上讲 - 你可以使用Integer.valueOf(s);返回一个Integer对象,其中包含.parseInt()将返回的确切值...虽然我怀疑这会被视为“作弊”。

第三,我认为这将对您有所帮助:http://nadeausoftware.com/node/97

特别是标题为:

的部分
  

使用自定义代码

解析字符串中的整数

答案 5 :(得分:0)

您可以使用StringBuilder从数字(int [])附加每个int num。

 StringBuilder sb = new StringBuilder();
 for (int num : numbers) {
    sb.append(num);
 }

 return sb.toString();

答案 6 :(得分:0)

一线解决方案

String str = Arrays.toString(a).replaceAll("\\D", "");

答案 7 :(得分:0)

好的,这是另一种方法。虽然这与另一个答案相似,但是这个可以处理一些零。只是数学,不使用Integer.parseInt:

public static int intsToInt(int[] input) {
    int total = 0;
    int multiplier = 1;

    for (int i=input.length-1; i > -1; i--) {
        if (input[i] == 0) {
            multiplier *= Math.pow(10, String.valueOf(input[i]).length());
        }

        else {
            total += input[i]*multiplier;
            multiplier *= Math.pow(10, String.valueOf(input[i]).length());
        }
    }

    return total;
}


public static void main(String[] args) {
    int[] ints = {1, 7, 12, 0, 16, 3, 8};
    out.println(digitsToInt(ints));
    out.println(intsToInt(ints));
}

答案 8 :(得分:0)

这是一个简单的实现。如果是错的请纠正(我是初学者)。

int concatArray(int[] array){
    int sum = 0;
    int len = array.length-1;

    for(int i=0; i<array.length;i++){
        sum += (Math.pow(10, len) * array[i]);
        len--;
    }

    return sum;
}