title: C语言-翁恺-PTA-81-120课后练习题-03
tags:
- PTA
- C语言
description: ’ ’
mathjax: true
date: 2024-04-05 22:21:00
categories: - PTA
7-84 连续因子
80-以后的题目感觉都不是很好做
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
输入样例:
630
输出样例:
3
5*6*7
鸣谢用户 漏穿雪 补充数据!
代码长度限制
16 KB
时间限制
400 ms
内存限制
错误代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main() {
long n = 0;
int t = 0,beg=0,sum=0,sumt=0,begt=0;
int num[1000] = {
0};
scanf("%ld", &n);
for (int i = 2; i <= n / 2; ++i) {
if (n % i == 0) {
num[t++] = i;
//printf("%d ", i);
}
}
//printf("\nt is %d\nt[22] is %d\n", t,num[t-1]);
for (int i = 1; i <t; ++i) {
if (num[i] == num[i - 1]+1) {
if (i == t - 1) {
sumt = i - begt+1;
if (sumt > sum) {
beg = begt;
sum = sumt;
}
begt = i;
}
}
else {
sumt = i - begt;
if (sumt > sum) {
beg = begt;
sum = sumt;
}
begt = i;
}
}
printf("%d\n",sum);
for (int i = beg; i < beg + sum; ++i)