2014-01-07 4 views
0

Я написал код для следующей программы, но я не понимаю, как я могу задействовать функцию. Этот вопрос просит меня использовать функцию, возвращающую сумму делителей. Пожалуйста, взгляните на вопрос и мой код и попробуйте помочь мне.Поиск Divisors с использованием петель

ВОПРОС:

Напишите программу C, которая находит и печатает сумму делителей для всех чисел между 101 и 110. делителями х являются теми числами х делит без остатка (например, делители числа 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

Вы можете переместить петлю, где вы рассчитать сумму делителей для каждого х в отдельную функцию:

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); 
} 
Смежные вопросы