Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

素因数分解プログラム 仕上げ

素因数分解するプログラムを書いたのですが、最後の仕上げで、一番後ろの*を表示させないようにできません。
問題点を指摘してください。よろしくお願いします。

class Sosubunkai{
    public static void main(String[] args) throws IOException{
        System.out.println("素数分解する整数を入力してください。");
        BufferedReader br =
            new BufferedReader(new InputStreamReader(System.in));
        String str=br.readLine();
        int num = Integer.parseInt(str);
        double tmp=0.;
        int tmp2;
            for(int i=2;i<=num;i++){
                for(int j=2;j<=i;j++){
                    if(j == i){
                        int k=0;
                        tmp2 = num;
                        do{
                            int n= tmp2/i;
                            double n2 =(double)tmp2/i;
                            if(n2 == (double)n)
                            k++;
                            else
                            break;
                            tmp2 = n;
                        }while(true);
                        /*問題の箇所 始め*/if(k != 0){
                            System.out.print(i+"^"+k);
                            tmp *= Math.pow(i,k);
                            if( tmp != (double)num)
                            System.out.print("*");
                        }/*問題の箇所 終わり*/
                    break;
                    }
                    else {
                        if(i%j == 0)
                        break;
                    }
                }
            }
    }
}

3

回答

4286

閲覧

3件の回答

評価

0

「表示させないように」の意味が分からん。
表示させたくないなら、書かなければいいじゃないか。

評価

0

doubleの精度の問題でしょう。
扱える桁数を増やしたいだけならdoubleではなくBigInteger(任意精度整数)を使用しましょう。

評価

0

  if( tmp != (double)num)
                            System.out.print("*");


if( tmp != (double)num){}

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。