📜  C测验– 112 |问题2(1)

📅  最后修改于: 2023-12-03 14:40:26.335000             🧑  作者: Mango

C测验– 112 |问题2

简介

本题是C语言基础题目,要求求出某一个整数的所有因子。

问题描述

请你编写一个C语言函数,该函数接受一个正整数作为参数,返回该正整数的所有因子。因子是指能够整除该正整数的正整数。

函数原型
int *factors(int number, int *factors_size);
输入
  • number:正整数,表示要求因子的数值。
  • factors_size:用于返回因子个数。
输出
  • 返回number的所有因数数组(返回值为整型数组指针)。
  • 该数组按升序排列,并且数组长度通过*factors_size参数返回。
注意
  • 返回的数组必须使用malloc(或相应的内存分配函数)分配。
  • 如果number为零,返回的数组指针应该为NULL,并且因子个数应该为0
示例
#include <stdio.h>
#include <stdlib.h>

int *factors(int number, int *factors_size);

int main()
{
    int n, size, i;
    scanf("%d", &n);
    int *factor_list = factors(n, &size);
    if (factor_list == NULL)
    {
        printf("Factor list is NULL!\n");
        return 0;
    }
    printf("Total items of factor list is %d:\n", size);
    for (i = 0; i < size; i++)
    {
        printf("%d ", *(factor_list + i));
    }
    printf("\n");
    free(factor_list);
    return 0;
}

int *factors(int number, int *factors_size)
{
    if (number == 0)
    {
        *factors_size = 0;
        return NULL;
    }
    int *factor_list = (int *)malloc(sizeof(int) * number);
    int i, count = 0;
    for (i = 1; i <= number; i++)
    {
        if (number % i == 0)
        {
            *(factor_list + count) = i;
            count++;
        }
    }
    *factors_size = count;
    return factor_list;
}
解题思路

本题需要求出某一个整数的所有因子,因子是指能够整除该正整数的正整数。此题可以通过枚举法来解决,对于一个正整数,依次枚举所有的可能的因子,如果该因子能够被整除,则该因子是这个数的一个因子。

本题需要注意的是:返回的数组必须使用malloc(或相应的内存分配函数)分配,如果输入的数为零,则返回的数组指针应该为NULL,并且因子个数应该为0

代码说明

本题代码主要包括了以下几个部分:

  • main函数:主函数,负责接受输入参数和打印输出结果。
  • factors函数:求出给定整数的因子的函数。
  • 输入:
    • number:给定的正整数。
  • 输出:
    • *factors_size:因子个数,通过指针返回。
    • 返回值:所有因子的数组(动态分配空间)。
测试结果

输入:

12

输出:

Total items of factor list is 6:
1 2 3 4 6 12