2015-12-04 27 views
1

我可以在循环中轻松打印我想要的内容,但是我对函数很陌生,我需要保存或返回分隔符的总和对于用户输入的数字没有余数。函数返回分隔符数量的总和,不包含数字的余数,C

例子:

输入 - 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是我想要的分隔的一个,我该怎么救它变成一个变量?还是数组?

+0

你已经宣布了一堆的变数,只是声明另一个持有的总和,并添加到它,你走了,到底它返回。 –

+0

@EricRenouf我想他想保存这些数字(分隔符)。 – asfandahmed1

+0

@吉拉德是否需要数字的总和等于输入? – asfandahmed1

回答

2

你可以做到这样......

//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; 
} 
+0

伟大的代码..谢谢 – Gilad

+0

@Gilad不客气:) – InsomniacSabbir

3

要返回正确的除数的总和,这样做:

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关键字返回的值。

+0

我想保存每个分频器,例如数字6.我需要保存1,2,3。我可以在数组中做这个吗?不知道数字? – Gilad

+0

@Gilad,我已经给出了答案。请看一下。 – InsomniacSabbir

2

由于此任务看起来很有趣,所以不想带走编码体验。取而代之的是一个示例算法,它应该直接用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?了解更多高级创意。

0

你可以看到另一种方法来做到这一点。对于大量的数据,这将工作得非常快。这是我的方式,你可以按照这个以最快的方式找到这个数字的因素总和。这里是我的代码:

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然后通过long更改所有int

谢谢。