5

"abc"String を、たとえば を、対応する ascii を持つ intに変換したい: この例では、 979899.

私は2つの問題に遭遇しました:

1)私が書いたものは、ASCIIが2文字の長さの文字に対してのみ機能し、

2) これらの数値が非常に大きくなるため、long を使用できず、BigInteger の使用に問題があります。

これは私がこれまでに持っているものです:

BigInteger mInt = BigInteger.valueOf(0L);
for (int i = 0; i<mString.length(); i++) {
        mInt = mInt.add(BigInteger.valueOf(
                (long)(mString.charAt(i)*Math.pow(100,(mString.length()-1-i)))));
}

どんな提案も素晴らしいでしょう、ありがとう!

4

3 に答える 3

5

StringBuilderすべての連結を最初に aで行い、次に結果から a を作成することの何が問題になっていBigIntegerますか? これは、現在行っていることよりもはるかに簡単なようです。

String str = "abc";  // or anything else

StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray())
    sb.append((int)c);

BigInteger mInt = new BigInteger(sb.toString());
System.out.println(mInt);
于 2012-11-15T20:55:23.567 に答える
1

数字ゲームをする必要はありません。(パウ100など)。数字の文字列を取得して、コンストラクターに渡すだけです。

final String s = "abc";
        String v = "";
        final char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            v += String.valueOf((int) chars[i]);
        }
//v = "979899" now
        BigInteger bigInt = new BigInteger(v); //BigInteger
        BigDecimal bigDec = new BigDecimal(v); // or BigDecimal
于 2012-11-15T20:56:33.447 に答える
0

n桁の数値を処理するには、毎回10の異なる累乗を掛ける必要があります。あなたはループでこれを行うことができます:

BigInteger appendDigits(BigInteger total, int n) {
    for (int i = n; i > 0; i /= 10)
        total = total.multiply(10);

    return total.plus(new BigInteger(n));
}

ただし、この問題は実際には文字列の操作に関するもののようです。私がおそらく行うことは、単に数字を文字列に累積し、最後に文字列からBIを作成することです。

StringBuilder result = new StringBuilder();
for (char c : mString.getBytes())
    result.append(String.valueOf(c));
return new BigInteger(result.toString());
于 2012-11-15T21:15:41.500 に答える