2016-09-12 19 views
1

私の質問は、プロジェクトの問題8と関係がある。オイラー:最高の製品を持つ1000桁の数字のうち13桁を見つけてください。この製品の価値は?Javaで正の掛け算から負の数を得る

私のプログラムはこれを解決できるはずだと思いますが、私は奇妙な結果を得ています。デバッグの理由から私は13桁の製品をすべて印刷しました。 1000桁の数字に負の数字がなくても、これらのうちのいくつかは負です。私はかなり長い間このことに固執していました。もし誰かがこれで私を助けることができたら、大いに感謝します。

import java.io.*; 

public class Highest13 { 
public static void main(String[] args) throws FileNotFoundException { 
    File input = new File("number1000.txt"); 
    Scanner in = new Scanner(input); 
    long number = 1L; 
    long highest = 1L; 
    char c = '1'; 
    String given = ""; 

    in.useDelimiter(""); 
    while (in.hasNext()) { 
     given += in.next(); 
    } 

    for (int i = 0; i < given.length()-12; i++) { 
     for (int j = 0; j <= 12; j++) { 
      c = given.charAt(i + j); 
      number = number * Character.getNumericValue(c); 
     } 
     System.out.println(number); //printed for debugging --> gives negative numbers 
     if (number > highest) { 
      highest = number; 
     } 
     number = 1L; 
    } 
    System.out.println(highest); 
} 
} 
+1

負の数値が表示された場合は、13桁の数字を印刷してみてください。 –

+1

BTWは1文字を1つの文字列として一度に読み込み、毎回新しい文字列に追加する*本当に非効率的です。すべての文字に対して2つのStringオブジェクトを作成しています。 1つだけ作成することは可能です。 –

+2

任意の文字が数字でない場合、たとえば、空白または改行 'Character.getNumericValue(c)'は-1を返します。 –

答えて

4

任意の文字が数字ではない場合、例:空白または改行Character.getNumericValue(c)は-1を返します

文字列を構築するときに非数字文字を削除することをお勧めします。