2014-01-07 59 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); 
}