1

私はこの問題を抱えています:

正の整数はpalindrome、10進法での表現が左から右、および右から左に読み取られたときに同じである場合、aと呼ばれます。K桁以下の与えられた正の整数に対して、出力1000000するよりも大きい最小の回文の値を書き込みKます。数値は常に先行ゼロなしで表示されます。入力

最初の行にはt、テストケースの数である整数が含まれています。整数Kは次のt行に示されています。出力

それぞれについてK、よりも大きい最小の回文を出力しKます。例

入力:

2
808
2133

出力:

818
2222

私のコードは入力を文字列に変換し、文字列の両端を評価してそれに応じて調整し、内側に移動します。ただし、この問題では、最大10 ^ 6桁の長さの値が必要になる可能性があります。大きな数値を解析しようとすると、数値形式の例外が発生します。

Integer.parseInt(LARGENUMBER);

また

Long.parseInt(LARGENUMBER);

範囲外LARGENUMBERです。誰かが回避策やそのような大量の処理方法を考えることができますか?

4

3 に答える 3

5

おそらく、BigIntegerクラスを使用して、このような大きな整数を処理できます。

しかし、私はそれがそのような巨大なサイズで効率的であることを期待していません。それはまだO(n^2)乗算と変換のためのアルゴリズムを使用しているからです。

于 2011-10-24T00:01:50.357 に答える
5

あなたが今しているあなたのステップを考えてください。数値を文字列に変換して処理しているので、少し余分に見えるものがありますか?

于 2011-10-24T00:03:17.833 に答える
2

この問題は整数について語っていますが、入力と出力の文字と形式を制限するためだけにそうしています。これは実際には、慎重に選択した文字列操作に関する質問です。これが事実であるため、入力を実際に整数として読み取る必要はなく、文字列のみです。

これにより、回文の検証が簡単になります。解決する必要があるのは、次に高いものを選択することだけです。

于 2011-10-24T06:08:38.387 に答える