C++如何先打印数字的因数总数再输出所有因数,附现有代码求修改
代码修改思路
你当前的代码逻辑是遍历过程中遇到因数就直接打印,同时累计计数,所以输出顺序必然是因数在前、总数在后。要调换输出顺序,核心是先拿到因数总个数,再打印所有因数,有两种常用实现方案:
方案1:单次遍历+存储因数(仅遍历1次,效率更高)
用容器存储所有找到的因数,遍历完成后先输出容器长度(即因数总数),再遍历容器打印所有因数:
#include<iostream> #include<vector> using namespace std; int main(){ int N,i; vector<int> factors; cin>>N; for(i=1;i<=N;i++){ if(N%i==0){ factors.push_back(i); } } // 先输出因数总数 cout<<factors.size()<<endl; // 再输出所有因数 for(int j=0;j<factors.size();j++){ cout<<factors[j]<<" "; } return 0; }
方案2:两次遍历(无需额外存储空间,适合小数值场景)
第一次遍历只统计因数总数不做输出,打印总数后第二次遍历再打印所有因数:
#include<iostream> using namespace std; int main(){ int N,i; int count=0; cin>>N; // 第一次遍历统计因数总数 for(i=1;i<=N;i++){ if(N%i==0){ count++; } } // 先输出因数总数 cout<<count<<endl; // 第二次遍历输出所有因数 for(i=1;i<=N;i++){ if(N%i==0){ cout<<i<<" "; } } return 0; }
内容的提问来源于stack exchange,提问作者vikas
相关产品推荐
相关产品推荐

