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();
}
}
}
沒有留言:
張貼留言