0

この宿題は、1 から 1000 までの完全数に関する宿題でした。ここで、数はその約数の和に等しくなります。数値が完全数であるかどうかを確認する正しいコードを見つけたところ、それらの数値が 1、6、28、496 であることがわかりました (1 が含まれている理由はわかりませんが、それは私の先生の例に含まれていました)。私の質問は簡単です。私が望んでいた出力は次のようなものでした:
1 = 1
6 = 1+2+3
28 = 1+2+4+7+14
496 = 1+2+4+8+16+31+62+124+
248私がなんとか得たのは:
1 = 1
6 = 1+2+3+
28 = 1+2+4+7+14+
496 = 1+2+4+8+16+31+62+124+ 248+
最後に余分な + を除外するにはどうすればよいですか?
私のコードは次のようになります。

private static boolean perfect(int n){
    boolean cek=false;
    int x=0;
    if(n==1)x=1;
    for(int i=1;i<n;i++){
        if(n%i==0)
            x+=i;
    }
    if(x==n)cek=true;
    return cek;
}
public static void main(String[] args) {
    for(int i=1;i<1000;i++){
        if(perfect(i)){
            if(i==1)
                System.out.println(i+"\t = "+i);
            else{
                System.out.print(i+"\t = ");
                for(int j=1;j<i;j++){
                    if(i%j==0)
                        System.out.print(j+"+");
                }
            System.out.println("");
            }
        }
    }
}    

前もって感謝します。

4

2 に答える 2

1

これは宿題なので、ヒントを与えます。単純に、ループの最初の繰り返しでない+場合にのみ出力します。それをテストするのは簡単です。

編集、追加のヒント: を正確に印刷する場所を実験する必要がある場合があります+

于 2013-11-25T22:59:34.300 に答える
0

これを試して

boolean first = true;
for(int j=1;j<i;j++){
     if(i%j==0)
        if(!first)
           System.out.print("+"+j);
        else{
           first = false;
           System.out.print(j);
        }
 }
于 2013-11-25T23:06:38.367 に答える