3

我正在尝试获取任何长度的整数数组,并将其连接成一个数字而不加起来。例如,如果我有一个如下所示的数组

[ 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]);            
    }
4

9 回答 9

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.

于 2013-09-05T02:48:04.447 回答
1

试着想想最左边的数字的索引如何与你想要达到的最终数字中的 10 的幂相关。例如:有一个数组[1, 2, 3, 4]应该产生整数1234。以 10 为底的 1000 的幂与数组的长度和 的索引有何关系1

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

于 2013-09-05T02:55:49.723 回答
1

不使用任何解析的 Óscar Ló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,这将无法正常工作。如果这很重要,请告诉我,我将调整算法以适应它。

于 2013-09-05T02:58:22.433 回答
1

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

    var arr = [ 1, 7, 12, 16, 3, 8];
    var num = arr.join('');
    Number(num);
于 2020-05-21T09:19:28.050 回答
0

一条线解决方案

String str = Arrays.toString(a).replaceAll("\\D", "");
于 2013-09-05T03:58:41.363 回答
0

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

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

 return sb.toString();
于 2013-09-05T03:25:28.050 回答
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));
}
于 2013-09-05T04:04:01.143 回答
0

首先,您要返回一个 int ——而不是一个字符串!

其次——从技术上讲——你可以使用 Integer.valueOf(s); 它返回一个具有 .parseInt() 将返回的确切值的 Integer 对象......尽管我怀疑这将被视为“作弊”。

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

特别是标题为:

使用自定义代码从字符串中解析整数

于 2013-09-05T03:04:58.430 回答
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;
}
于 2017-08-13T17:40:49.490 回答