#24346: c++解法 AC


soyana66687@gmail.com (Dino\n)

學校 : 國立臺中科技大學
編號 : 97371
來源 : [60.250.9.66]
最後登入時間 :
2022-07-02 20:52:24
a010. 因數分解 | From: [36.233.54.240] | 發表日期 : 2021-02-08 12:45

#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,因數分解結束了,印出換行符號

可喜可賀 可喜可賀

我認為最困難的點是,判斷輸出數字是否為最後

希望大家看得懂註解,謝謝各位。

 
ZeroJudge Forum