C语言-翁恺-PTA-81-120课后练习题-03

本文介绍了如何使用C语言解决数学问题,包括计算最长连续因子的个数及其序列,识别水仙花数,以及处理整数按照3K+1和3K+2规则的分类。
摘要由CSDN通过智能技术生成

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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值