3

任意の長さの int の配列を取り、それを合計せずに 1 つの数値に連結しようとしています。たとえば、次のような配列がある場合

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

17121638equalではなく equal になる変数が必要です47

Interger.parseInt()入力文字列全体を使用せずに、文字列の入力を int に変更することになっています。

これは私の現在の試みです:

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

1

(質問が要求したように)解析を使用しないオスカー・ロペスのソリューションのバリアント:

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 に答える
0

まず、文字列ではなく int を返す必要があります。

第二に、技術的には、Integer.valueOf(s); を使用できます。これは、 .parseInt() が返す正確な値を持つ Integer オブジェクトを返します...これは「不正行為」と見なされると思いますが。

第三に、これはあなたのやり方に役立つと思います: http://nadeausoftware.com/node/97

特に、次のタイトルのセクション:

カスタム コードを使用して文字列から整数を解析する

于 2013-09-05T03:04:58.430 に答える
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 に答える