1

私は最近、一連の数字を持っているというクレジット カードの明細書に関する uni に関する質問を受けました。次に、これらの数字を個別の整数に変換し、その数字の位置に応じて 10 の累乗でインクリメントします。 horners メソッドを使用して文字列を作成し、ループから取得した値を追加して 1 つの完全な整数を作成する必要があります。これが文字列を int に変換する奇妙な方法であることはわかっていますが、割り当てには、組み込みの Java クラス/メソッドを使用するのではなく、horners メソッドを使用して文字列を変換する必要があると記載されています

私の質問は、個別の重み付けされた数値を追加して、それらを 1 つの数値に連結するにはどうすればよいかということです。

それが役立つ場合、例は次のようになります。

カード番号 1234 を指定すると、番号はその位置と長さに応じて重み付けされます。

1 - 1000
2 - 200
3 - 30
4 - 4

次に、これらを加算して整数を作成します

1、2、3、4 ---> 1234

これまでの私のコードは次のとおりです

public static long toInt(String digitString) {
    long answer = 0;
    long val = 0;
    String s = "";
    for (int j = 0; j < digitString.length(); j++) {
        val = digitString.charAt(j) - '0';
        val = (long) (val * Math.pow(10, (digitString.length() - 1) - j));
        System.out.println(val);

    }
    return answer;
}
4

2 に答える 2

1

これは単純すぎるように聞こえるので、おそらく私はあなたをフォローしていません。しかし、long (または整数) を返すには、これらの数値を合計するだけです。

public static long toLong(String digitString) {
    long answer = 0;
    long val = 0;
    for (int j = 0; j < digitString.length(); j++) {
        val = digitString.charAt(j) - '0';
        val = (long) (val * Math.pow(10, (digitString.length() - 1) - j));
        answer += val; // here! :)
        //System.out.println(val);
    }
    return answer;
}

これは負の数では機能しないことに注意してください。そのため、より複雑なバージョンを次に示します。

public static long toLong(String digitString) {
    long answer = 0;
    long val = 0;
    boolean negative = false;
    int j = 0;

    if (digitString.charAt(0) == '-') {
        negative = true;
        j = 1;
    } else if (digitString.charAt(0) == '+')
        j = 1;

    for (; j < digitString.length(); j++) {
        if (!Character.isDigit(digitString.charAt(j)))
            throw new NumberFormatException(digitString);

        val = digitString.charAt(j) - '0';
        val = (long) (val * Math.pow(10, (digitString.length() - 1) - j));
        answer += val;
    }

    return negative ? -answer : answer;
}

このコードは、負の数と + 記号で始まる奇妙な数でも機能します。他の文字がある場合は、例外がスローされます。

于 2013-08-20T04:03:15.303 に答える