函数表示returns除法数之和无余数,C

Function that returns the sum of the number of dividers without remainder of a number, C

我可以很容易地在循环中打印我想要的东西,但我是函数的新手,我需要保存或 return 没有余数的除法器的总和到输入的数字用户。

示例:

输入 - 6

输出 - 1+2+3=6

我是如何开始的:

int NumberOfDividers(int number)
{
    int i,num, count = 0;
    num = number;
    for ( i = 0; i < num; i++)
    {
        if ((num % i) == 0) //so now I know i is one of the dividers i want to save.

    }
}

所以如果 i 是我想要的分隔符之一,我怎样才能将它保存到一个变量中?还是数组?

要return适当除数的和,做:

int sum_of_proper_divisors (int number)
{
    int sum = 0;
    int i;
    for (i = 1; i < number; i++)
    {
        if ((number % i) == 0) 
           sum += i;
    }
    return sum;
}

您只需要使用 return 关键字来 return 值。

因为这个任务看起来很有趣,不想带走编码经验。相反,列出了一个示例算法,该算法应该相当直接地用 C 编写代码。

伪代码

int *NumberOfDividers(int number)
  find isqrt(number) --> sqrt_number
  sqrt_number*2 + 2 --> max_array_count
  allocate int[] with max_array_count elements
  validate allocation
  starting at divisor = 1, in a loop ...
    quotient = number/divisor
    remainder = number%divisor
    if (remainder == 0)
      add divisor to list
      if (divisor != quotient) add quotient to list
    if (divisor >= quotient) quit loop
    divisor++
  append 0 to list to indicate the end
  shrink array to needed size if desired
  validate shrink result
  return array pointer.

注意循环最多进行 sqrt(number) 次迭代,因此在使用任何除数之前可以计算所需数组大小的合理上限。

另请参阅 How many positive integers are factors of a given number? 了解更高级的想法。

您可以看到另一种方法。对于大量数据,这将非常快速地工作。这是我的方法,你可以按照这个以最快的方式找到这个来找到一个数字的因子之和。这是我的代码:

int number_of_divisor(int n)
{
    int sum_of_factors=0;
    sum_of_factors+=1;//as 1 is factor of all num
    //sum_of_factors+=n;//n will always a factor of n

    for(int i = 2; i * i <= n; ++i)
    {
        if(n % i == 0)
        {
            sum_of_factors+=i;
            if(i * i != n)
                sum_of_factors+=(n/i);
        }
    }
    return sum_of_factors;
}

如果您的输入是 long,则将所有 int 更改为 long

谢谢。

你可以这样做...

//other headers as you need
#include<string.h>//this header is for memset
int dividers[1000];//global array
int currPos;//global variable
int NumberOfDividers(int number)
{

   int i,num, count = 0;
   num = number;
   for ( i = 1; i < num; i++)//you should start counting from 1 otherwise you will get floating point exception
   {
       if ((num % i) == 0)
       {
           dividers[currPos]=i;//putting the dividers in the array
           currPos++;//updating the pivot where the next dividers will stay
       }
   }
   return 0;
}

int main()
{
    memset(dividers,0,sizeof(dividers));//initializing the array
    currPos=0;//initializing the variable to point at the start of the array
    NumberOfDividers(6);
    int i;
    int sum=0;
    for(i=0;i<currPos;i++)
    {
       printf("%d",dividers[i]);
       sum+=dividers[i];
       if(i!=currPos-1)
       {
           printf("+");
       }
   }
   printf("=%d\n",sum);
   return 0;
 }