2016-11-27 29 views
1

関数を含む問題のコードを記述しようとしています。入力番号を文字列として取り、intで7で割った残りの入力を返します。大きな数値を扱う際にランタイムエラーが発生する

コードは小さい数字のために動作しますが、次のように示さ入力として大量に処理するときに、それはランタイムエラーを促し..

Runtime error time: 0.04 memory: 711168 signal:-1 

Exception in thread "main" java.lang.NumberFormatException: For input string: "5‌​449495" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.math.BigInteger.<init>(BigInteger.java:470) 
    at java.math.BigInteger.<init>(BigInteger.java:597) 
    at Ideone.remainderWith7(Main.java:13) 
    at Ideone.main(Main.java:22) 

次のように私のコードは、..です

/* package whatever; // don't place package name! */ 

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone { 
    int remainderWith7(String num) { 
     // Your code here 
     java.math.BigInteger bg = new java.math.BigInteger(num); 
     //System.out.println(num); 
     Integer n = bg.intValue(); 
     return (int) n % 7; 
    } 

    public static void main(String[] args) throws java.lang.Exception { 
     // your code goes here 
     Ideone id = new Ideone(); 
     System.out.println(id.remainderWith7("56495654565052555054535456545355495650575755555757575350505‌​44949525452505653565‌​54949515453545151525‌​15050575749545453535‌​54954555157565253514‌​94949495155515455545‌​65555575452555157505‌​55557495050564952514‌​95051505752545155495‌​65156515750555450545‌​35549535551525149535‌​25654525554535154515‌​05251575251494956515‌​35255515450515553515‌​15657545054505357535‌​55654575549575349565‌​351575054")); 
    } 
} 
+0

エラーを編集して指定することをおすすめします。 BigInteger全体を強制的に強制終了した後、モジュロを使用していたことがわかりました。私は今問題の一部を理解しました。 – Makoto

+0

(実際にそれを実行した後に_I_実際に特定のエラーが追加されました) – qxz

+0

@qxz:ありがとう、ありがとう。 – Makoto

答えて

2

あなたはその文字列をどのように貼り付けましたか?それは多くのzero-width spaceszero-width non-joinersを含んでいるようです。

私は「似ている」と言います。実際には、文字列の配列の内容を出力した場合は、Arrays.toStringのいずれかで、その長い文字列を変数にカプセル化するか、デバッガで検査した場合にのみ、それらを見ることができます。

最終的には、それがあなたを迷惑にしています。 JavaはこれらのUnicode文字を数値に変換しようとしていますが、ではなくの数値なので-1に変換されます。これがあなたのコードが壊れている理由であり、なぜこれが壊れるのかがすぐに分かりません。その文字列にはすぐに信じられるよりも多くの文字があります。

この問題は、文字列からこれらの文字を削除することです。

String num = ""; // enter your long number here; not repeating it for brevity's sake 
num = num.replace("\u200C", "").replace("\u200B", ""); 

は今が私にを信頼しているため、あなたが戻って、そのようなあなたが剰余を(やりたいときBigInteger.modを使用していないなどのコードと他の問題に取得することができ、%を使用するつもりはないと、あなたに正しい答えを与えますそれと同じ大きさの整数)。

関連する問題