L1-006 连续因子 (20 分)

题目

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。解题的思路:
1.输入整数n

	 2^31 = 2,147,483,648, 而 12!< 2^31 < 13!
	 3~13相乘也大于2^31 所以最长有12个连续因子 

2.求的答案是最长最小连续因子
3.从12~1个数进行遍历
4.从2~根号n进行遍历,根据个数,开头数字,计算是否合适,合适的话就输出答案并结束,否则继续
5.单独输出质数

代码

#include <stdio.h>
#include <stdlib.h>

int n_integer(int n,int number,int front);
void print_divisor(int number,int front);

int main()
{
    int n,number,front; // 整数n,连续因子个数number,开头因子front
	scanf("%d",&n);
    /*
      2^31 = 2,147,483,648, 而 12!< 2^31 < 13!
	  3~13相乘也大于2^31 所以最长有12个连续因子 
    */
    // 这里必须要是number>0,要把1包括在内,因为求得是最长最小连续因子。 
    // 例如:50,如果number>1,输出的是50,number>0输出的是2 
    for(number=12;number>0;number--) // 循环最长个数,从大到小 
	{
		
		for(front=2;(long long)front*front<n;front++) // 循环因子,从小到大 
		{
			if(n_integer(n,number,front)) // 判断整数n是否以front开头有number个连续因子 
			{
				print_divisor(number,front); // 是的话就输出,并结束 
			}
		}
	 } 
	 print_divisor(1,n);//当数字n为质数的时候 ,输出原数 
    return 0; 
}

int n_integer(int n,int number,int front) 
{
	while(number-- > 0)
	{
		if(n%front!=0)
		{
			return 0;
		}
		n = n/front;
		front++;
	}
	return 1;
}

void print_divisor(number,front)
{
	printf("%d\n%d",number,front);
	number -- ;
	front++;
	while(number-- > 0)
	{
		printf("*%d",front);
		front++;
	}
	exit(0); // 直接结束 
}

结果

在这里插入图片描述
补充:
exit(0)代表正常结束程序,exit(1),exit(-1)代表非正常结束程序
C语言的整数 -2147483648 ~~ 2147483647(2^31)
n = n/t ++; 的含义是:n=n/t (t还未自增),之后t++;
例如:n=20; t=3; n = n/t ++;
答案:n=6,t=4
感谢B站up主:程序设计基础C99
https://www.bilibili.com/video/BV1K5411L7gS?from=search&seid=2015829533114709348&spm_id_from=333.337.0.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值