#18009: 然後呢?


a43913072@gmail.com (陳芃)

學校 : 國立暨南國際大學
編號 : 86383
來源 : [219.68.215.178]
最後登入時間 :
2019-06-25 20:44:12
a010. 因數分解 | From: [163.22.18.105] | 發表日期 : 2019-06-09 19:54

public class a001 {
public static void main(String[] args) {
java.util.Scanner scanner = new java.util.Scanner(System.in);
int n=scanner.nextInt();
for(int i=2;i<n+1;i++) {
if(n%i==0) {
n=n/i;
System.out.print(i);
i=i-1;
}else {
continue;
}
}
}
}

 
#18010: Re:然後呢?


freedom501999@gmail.com (帥氣魔方生)

學校 : 不指定學校
編號 : 88611
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
a010. 因數分解 | From: [39.8.203.54] | 發表日期 : 2019-06-09 21:10

public class a001 {
      public static void main(String[] args) {
            java.util.Scanner scanner = new java.util.Scanner(System.in);
            int n=scanner.nextInt();
            for(int i=2;i<n+1;i++) {
                  if(n%i==0) {
                        n=n/i;
                        System.out.print(i);
                        i=i-1;
                  }else {
                        continue;
                  }
            }
      }
}



幫你用好縮排了,以後請不要直接貼,至少像我這樣多按幾個空白縮排

( 好多好多人都這樣,明明學程式一開始都應該說過,縮排很重要........ )

你的問題如下 : 

      1. 你沒有處理多筆的測資

          請改成 while ( scanner.hasNext() )

      2. 這題是因數分解,你的 for 迴圈的效率很低,請改掉 

          例如 while ( n != 1 )

      3. 輸出錯誤,你只直接輸出他的因數,並沒有輸出乘號跟次方符號

以下是我的處理方式

      1. 讀進一筆測資,例如 20

      2. while ( n != 1 ),進入迴圈,開始找因數

      3. 因數 i 從 2 開始,if ( n % i == 0 ),代表 i 是 n 的因數

      4. 進入迴圈 while ( n % i == 0 ),因為要計算 n 含有幾個 i ,要輸出次方

      5. a 代表 個數,a = 0,以下是迴圈內容 : n = n / i ,a ++,直到跳出上面的判斷式

      6. 輸出,如果 a == 1,只要輸出 i ,反之要輸出 i ^ a 

      7. 如果 n != 1,代表還有因數,要輸出一個 * ,否則跳出迴圈

      8. 還沒跳出迴圈, i = ( i == 2 ? 3 : i +=2 ); 因為質因數分解,2 全部提出後只會剩下奇數

      9. 直到檔案到 EOF 為止,一直處理每筆測資

如果有建質數表,i 就要改,不過這題像我這樣處理應該沒問題,沒 TLE 就好

 
ZeroJudge Forum