题目
思路
一开始想的是,用一个双重循环,把每一次符合的结果放到vector里存着,还要记录最大值和长度,最后直接输出即可。可以是可以,但是没必要,而且很容易写的比较混乱。。
要仔细读题,让你求什么就记录什么,只需要找连续的数字的长度就可以,而不是把所有的因子都找出来,化简一下运算。。。
代码
#include <bits/stdc++.h>
#define maxx 10001
using namespace std;
int main()
{
int x;
cin>>x;
int len = 0,mmax = 0,start = 0;
for (int i = 2; i <= sqrt(x); ++i)
{
int tmp = x;
int j = i;
len = 0;
while (tmp%j == 0) //用while写这个循环会短很多
{
tmp/=j;
len++;
j++;
}
if (len > mmax)
{
mmax = len;
start = i;
}
}
if (mmax == 0)
{
cout<<1<<endl;
cout<<x<<endl;
return 0;
}
cout<<mmax<<endl;
int f = 0;
while (x%start == 0)
{
if (f!=0)
cout<<'*';
cout<<start;
x /= start;
start++;
f=1;
}
cout<<endl;
return 0;
}