2020年2月26日 星期三

[zerojudge]a010. 因數分解

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();
        }
    }
}   

沒有留言:

張貼留言