a010. 因數分解
    因數分解就是從2開始除一直除到除不下去為止嘛,
    迴圈結構: 
    
        for(除數 = 2; 被除數 != 1; 除數加一){
            while(被除數可以被除數整除){
                被除數 = 被除數 / 除數;
            }
        }
    
    大致上就是這樣的狀態,可是還缺乏了次方、輸出等等,所以再加強:
    
        for(除數 = 2; 被除數 != 1; 除數加一){ // "!="是不等於的意思
            int 次方 = 0;
            while(被除數可以被除數整除){
                次方加一;
                被除數 = 被除數 / 除數;
            }
            if(次方 > 1){
                //要輸出含有"^"的結果
                print(除數 ^ 次方)
            }else if(次方 == 1){
                //僅輸出除數就好
                print(除數)
            }
            if(被除數 != 1 且 次方 != 0){
                //除數還未除盡 且 當次迴圈整除
                //就是肯定還有因數沒找完
                print(" * ")
            }
        }
    
    因為題目說資料是大於1所以不用考慮被除數是1的情況。
程式碼如下:
/* a010:因數分解
*
* 2020/2/26
*
*/
import java.util.Scanner;
public class Pa010{
    public static void main(String [] args){
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int dividend = scanner.nextInt(); //dividend = 被除數
            for(int divisor = 2; dividend != 1; divisor++){ //divisor = 除數
                int pow = 0;
                while(dividend % divisor == 0){
                    pow++;
                    dividend /= divisor;		
                }
                if(pow > 1){
                    System.out.printf("%d^%d", divisor, pow);
                }else if(pow == 1){
                    System.out.print(divisor);
                }
                
                if(dividend != 1 && pow != 0){
                    System.out.print(" * ");
                }	
            }
            System.out.println();
        }
    }
}   
沒有留言:
張貼留言