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;
}
}
}
}
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 就好