white Era 2021-03-10 13:34 采纳率: 0%
浏览 147

如何求出整数因子分解式并输出

下面是我编写的自低向上求整数因子个数的方法:

int main() {

    /*solve(12);
    cout << total << endl;*/

    int n;
    cin >> n;
    int* numbers = new int[n+1];
    for (int i = 0; i <= n; i++) {
        numbers[i] = 0;
        cout << numbers[i] << " ";
    }
    cout << endl;
    for (int i = 1; i <= n; i++) {
        
        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                numbers[i] += numbers[j];
                
            }
        }
        numbers[i] += 1;
        //cout << numbers[i] << " ";
    }
    cout << numbers[n] << endl;
    return 0;
}

下面是输出分解式的样例

  • 写回答

1条回答 默认 最新

  • 山月照空舟 全栈领域优质创作者 2024-05-13 15:36
    关注

    首先,你的代码中在循环中只考虑了整数因子的个数,并没有记录整数因子分解式,这里可以稍作改进,其次在设计该算法时最好能够分开写,这样能够提高可读性,在你的图片中输出了多种结果,所以可以采用递归实现,条件可以使用n > 1来限制。

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void factorization(int n, vector<int>& factors, vector<vector<int>>& result)
    {
        for (int i = 2; i * i <= n; i++)
        {
            if (n % i == 0)
            {
                factors.push_back(i);
                factorization(n / i, factors, result);
                factors.pop_back();
            }
        }
        if (n > 1)
        {
            factors.push_back(n);
            result.push_back(factors);
            factors.pop_back();
        }
    }
    

    在主函数中,调用factorization并将返回值输出到两个容器内,并循环输出,根据图片中的返回值来输出即可。

    int _tmain(int argc, _TCHAR* argv[])
    {
        int n;
        cin >> n;
    
        vector<int> factors;
        vector<vector<int>> result;
    
        factorization(n, factors, result);
    
        for (const auto& f : result)
        {
            cout << n << " = ";
            for (int i = 0; i < f.size(); i++)
            {
                cout << f[i];
                if (i != f.size() - 1)
                {
                    cout << " * ";
                }
            }
            cout << endl;
        }
    
        system("pause");
        return 0;
    }
    

    运行这段程序,输入你所需要的12,输出效果如下所示;

    img

    评论

报告相同问题?