完善程序1解析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**************************************************************** 
 * Description:  顺序打印因数
 * Author: Alex Li
 * Date: 2023-08-16 06:46:49
 * LastEditTime: 2023-09-13 05:59:07
****************************************************************/
#include <iostream>
using namespace std;

int main(){
    int n;
    cin >> n;

    vector<int> fac; //定义一个动态数组
    //sqrt(n)是取n的平方根,如果是小数,就用ceil上取整数,并把结果类型转成整数
    //fac.reserve是根据括号内的值保留数组空间。
    fac.reserve((int)ceil(sqrt(n)));
    
    int i;
    //将1~i(i*i<n)内所有n的整数因子按顺序存到fac数组里面。 
    for (i = 1; i * i < n; ++i){
        if (n%i==0){  //空1,看i是否是n的因数
            fac.push_back(i);
        }
    }
    //输出fac数组内的整数,因数是从小到大 
    for (int k = 0; k < fac.size(); ++k){
        cout <<fac[k] << " "; //空2,输出因数
    }
     //如果n有整数平方根,输出。这里i在上一个循环结束时,是i*i不小于n,所以有可能i*i==n
    if (i*i==n) {  //空3
        cout << i << " ";  //空4,l输出n的平方根
    }
   //因为题目要求是从小到大打印因数,所以i~n里的因数,用n/fac[k],k从大的开始,这样出来的是升序。
    for (int k = fac.size() - 1; k >= 0; --k){
        cout << n/fac[k]<< " "; //空5,输出大于sqrt(n)的因数
    }
    
}
Scroll to Top