天梯赛的题目解析汇总目录一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为356*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。 输入格式: 输入在一行中给出一个正整数N(1<N<231)。 输出格式: 首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1因子2……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。 输入样例:630输出样例:3 5*6*7通过两层for循环,第一层表示连续因子开始的元素,第二层则从这个开始位置一直往后判断,只要不能除尽,则当前长度就是j-i。通过两层循环,让每个元素都尝试做第一个位置元素,所有情况尝试完以后,最大的情况自然也就求出来了。 这里的curLen表示当前循环达到的长度,maxLen表示最大长度,maxS表示最大长度的情况下,开始位置的元素 注意特殊情况,如果是素数,那么就输出1,和这个数本身。#include <cstdio> #include <cmath> using namespace std; int n, maxLen = -1, maxS, curLen, tem; int main () { scanf("%d", &n); curLen = 0, tem = n; for (int i = 2; i <= sqrt(n); i++) { tem = n; curLen = 0; for (int j = i; j <= sqrt(n); j++) { if (tem % j == 0) { tem /= j; curLen++; } else { break; } } if (curLen > maxLen) { maxLen = curLen; maxS = i; } } if (maxLen == -1 || maxLen == 0) { printf("1\n%d\n", n); return 0; } printf("%d\n", maxLen); for (int i = maxS; i < maxS + maxLen; i++) { if (i != maxS) printf("*"); printf("%d", i); } return 0; }
查看原文:http://iluhao.top/archives/722
L1-006. 连续因子
最新推荐文章于 2024-06-03 17:59:48 发布