#include <iostream>
using namespace std;
int main()
{
int num=0; //num 為輸入的數字
bool last=0; //last 判斷因數分解的數字 是否為最後數字
while(cin>>num)
{
for(int i=2; i<=num; i++) //找 能整除num的數字i
{
int hold=0; //hold 為計算次方項
while(num%i==0) //當i能整除num時
{
hold++; //增加一次方
num/=i;//更新num的數值
if(num==1)//num=1,因為此時的num等於i,所以num/i才會等於1
{
last=1;//所以此時的i已經是 最後一個印出的數字
}
}
if(hold!=0)//表示i能整除num
{
if(hold>1)//如果次方項大於一次
{
cout<<i<<'^'<<hold;//要顯示出次方項
}
else//只有一次方 不用顯示次方項
{
cout<<i;
}
if(last)//如果印出的數字 是最後一個的話
{
cout<<endl;//換行
}
else//如果不是:
{
cout<<" * "; //表示後面還有數字
}
}
}
}
return 0;
}
ex:輸入20
i=2時,num除i餘0,所以
--進入while--
第一次 將20 除以2 餘數為0
將hold加一 表示 20 的因數分解中 有一個2
將num的數值更新,將其除以2,得10
第二次 將10 除以2 餘數為0
將hold加一 表示 20 的因數分解中 有兩個2
將num的數值更新,將其除以2,得5
--跳出while--
--進入if判斷區--
hold=2
所以印出2^2
而last=0,因數分解尚未結束,印出 *
i=5時,num除i餘0,所以
--進入while--
第一次 將5 除以5 餘數為0
將hold加一 表示 20 的因數分解中 有一個5
將num的數值更新,將其除以5,得1
這時的num已經不能再分解了
將last設為1
--跳出while--
--進入if判斷區--
hold=1
所以印出5
而last=1,因數分解結束了,印出換行符號
可喜可賀 可喜可賀
我認為最困難的點是,判斷輸出數字是否為最後
希望大家看得懂註解,謝謝各位。