题目描述一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。 输入格式:输入在一行中给出一个正整数 N(1<N<2^31)。 输出格式:首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按因子1×因子2×……×因子k的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。 输入样例: 630 输出样例: 35*6*7 解题思路:⚠️要注意到连续因子的含义:比如说:630 = 3×5×6×7,连续因子就是5、6、7再看:168的因数有6、7、8,但是6×7×8 = 336发现差别了吧 题解:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include <bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; int max1 = 0; int index = 0; // 循环到n的平方根就够了 for(int i = 2; i <= sqrt(n); i++) { int j = i; int sum = 0; int N = n; //找连续因数 while(N % j == 0) { N = N / j;//此处一定要有 sum ++; j ++; } //连续因数的个数比以前的大 if(sum > max1) { max1 = sum; index = i; } } //质数情况 if(max1 == 0) { cout << "1" << endl; cout << n; } //非质数情况 else { cout << max1 << endl; for(int i = index; i < index + max1; ++i) { if(i == index) cout << i ; else cout << "*" << i; } } return 0;} 文章作者: HBU文章链接: http://hbuacm.github.io/2020/08/03/day19/版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HBUACM!c++ helloworld上一篇day20 单链表的创建及遍历下一篇day18 N个数求和 相关推荐 2020-07-16day01 c++ 入门 helloworld 2020-07-30day14 字符串循环左移 评论