blue-phoenix
@blue-phoenix

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

巨大な数の計算について

Q&A

Closed

投稿し直しです、ある2つの文字列S,Tを足す時の計算ですが一部の結果が通せません。
数値1.png

図のように小さな数は通りますが、膨大な数値のみがダメとなります。
色々と模索して以下のコードが通せるとの事で書いてみましたが。

String S = sc.next();
String T = sc.next();

int ans = "";
for (int i = 0; i < S.length; i++) {
String [s, t] = [Number(S[i]), Number(T[i])];
ans += s + t;
}
System.out.println(ans);
}}

文字列として計算しろという事でこうしました。
[s,t]の記述にエラーが出ているようで、どうすれば良いか解決方法の御教授お願いしします。

0

1Answer

BigDecimalBigIntegerを利用することで計算可能となります。

import java.util.*;
import java.math.BigInteger;
public class Main {
    public static void main(String[] args) throws Exception {
        String s = "1111111111111111111111111111111";
        String t = "2222222222222222222222222222222";
        BigInteger sNumber = new BigInteger(s);
        BigInteger tNumber = new BigInteger(t);
        System.out.println(sNumber.add(tNumber));
    }
}

また、記載されているコードはJavaScript等、他の言語の文法が混ざっているように見受けられます。
別件ですが、一個前の質問でBigDecimalを利用するという回答ももらっていたはずですが、質問を消して対応するのはあまり良くないと思います。

2Like

Comments

  1. 別解として、無限桁数の入力を受け付けるのは現実的ではありません。
    特定桁数以上(8桁など)の入力であれば再入力を促す処理を入れたほうが良いと思います。
    int(Integer)の最大値は`2147483647`なのでそれ以上は受け付けられません。
    また、long(Long)の最大値は`9223372036854775807`です。
  2. @blue-phoenix

    Questioner

    すみませんが、Bの部分にエラーが出てしまいます。
    ケースが通らないところは桁が78個もあるんですが・・・。
  3. Bの部分とはどこですか・・・?
    `import java.math.BigInteger;`これは追加しましたか?

    >桁が78個もある
    このケース自体は正しいのでしょうか?
    テストする必要がないケースなのではないかと思っています。
    作ろうとしているものが何かわからないので、桁数の制限についてどうすればよいか最終的なアドバイスはできかねます。
    一般的に78桁の数値を扱うような要件は考えにくいのですが。
  4. @blue-phoenix

    Questioner

    と、と、と、通った・・・すみません、そこが抜けてました。
    inportか、迂闊だった・・・いつも細かいところが。
    勝手に消したのは本当に申し訳ありませんでした。
    金輪際そういう事をしないようにします、御助言ありがとうございました。

Your answer might help someone💌