建民打卡日记4.24

发布时间 2023-04-24 15:17:18作者: cor0000

一、问题描述

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

二、流程设计

         (1)使用循环

        (2)循环要怎么用(求解因子;求解连续因子;我们还要求解连续因子的个数,因为要输出最多连续因子个数的连续因子;我还要求这个连续因子的起点,比如630的最长连续因子是5*6*7,起点是5,然后在递增输出就好了,所以起点我也要知道)

        (3)确定用双循环(因为我一边要确定连续因子,我还要确定连续因子个数,求解连续因子我就要一个循环了,那么再加上一个个数我也得套在循环里,更何况还有一个起点呢)

        (4)输出格式的限制:我需要先输出最长因子的个数,在输出最长连续因子相乘,乘号有讲究。

四、代码实现

#include <bits/stdc++.h>
using namespace std;

int main() {
	long long n;
	cin >> n;
	int i=0,j=0,a=0,sum=0,num=0,temp=0,qidian =0,longqidian=0;
    int x =sqrt(n);
    for(i=2;i<=x;i++){
        num=0;
        sum=n;
        qidian=i;
        for(int j=i;sum%j==0&&sum!=0;j++){
            sum/=j;
            num++;
        }
        if(num>temp){
            temp=num;
            longqidian=qidian;
        }
    }
    if(temp==0)
        printf("1\n%d",n);
    else
    {
        printf("%d\n",temp);
        i=longqidian;
        while(i<longqidian+temp){
            if(i!=longqidian)
                printf("*");
            printf("%d",i);
            i++;
        }
    }
}