2014-01-07 35 views
0

我为以下程序编写了代码,但我不明白如何使用函数。该问题要求我使用返回除数总和的函数。请看看这个问题和我的代码,并试图帮助我。查找使用循环的因子

问题:

编写发现并打印除数的总和为101和110 x的除数之间的所有 数C程序是那些数字 X除以没有余(例如10的因数为1, 2,5和10,它们的总和= 1 + 2 + 5 + 10 = 18,11 的因数为1和11,它们的和= 1 + 11 = 12,以及等等)。 你的程序还应该打印具有最大除数总和的数字(101至110)。

你的程序应该至少使用一个叫做div_sum的函数, 需要一个数字并返回除数的和。

我的代码:

#include <iostream> 
#include <stdio.h> 


int main() 

{ 
int i=1, x=101, sum, smax=0, xmax=0; 

    for (x=101; x<=110; x++) 
     { sum=0; 

      for(i=1; i<=x; i++) 
       { 
        if(x%i==0) 
        sum+=i; 
       } 

      if(sum>smax) 
       { 
        smax=sum; 
        xmax=x; 
       } 

      printf("The sum of factors of %d = %d\n",x,sum); 

     } 

    printf("The number that has the maximum sum of divisors is %d with the sum of %d",xmax,smax); 

    return 0; 
} 
+0

的代码看起来不错,除了你不使用函数'div_sum'。 – Nabla

回答

2

您可以移动,你计算除数的总和每个x到单独的函数循环:

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

,并在程序中使用它:

for (x=101; x<=110; x++) 
{ 
    sum= div_sum(x); 
    if(sum > amax) 
    ... 
} 
+0

我真的很感谢! – user3038319

2

对于循环中的每个数字,调用函数。该函数应该拥有当前循环中的所有代码。

1

您的代码实际上非常接近。

这里就是我所做的:

void div_sum() 
{   

    int sum; 
    int max_sum = 0; 
    int max_num; 

    for (int x = 101; x <= 110; x++) 
    { 
     sum = 0; 
     for (int i = 1; i <= x; i++) 
     if (x%i == 0) 
      sum = sum + i; 

     printf("\nFor the number %d, the sum of the divisors is %d\n", x, sum);   
     if (sum > max_sum) 
     { 
      max_sum = sum; 
      max_num = x; 
     } 
    } 
    printf("max = %d\n", max_num); 
}