使用循环查找除数

时间:2014-01-07 17:05:27

标签: c

我为以下程序编写了代码,但我不明白如何使用函数。这个问题要求我使用一个返回除数之和的函数。请查看问题和我的代码并尝试帮助我。

问题:

  

编写一个C程序,查找并打印所有除数的总和   101和110之间的数字.x的除数是那些数字   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;
}

3 个答案:

答案 0 :(得分: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)
   ...
}

答案 1 :(得分:2)

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

答案 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);
}