在C中添加常见因素

时间:2016-11-27 02:09:38

标签: c function recursion add

我只是想添加3和5的所有常见因子,以1000的总和停止。我在第15:18行继续获得预期的表达式。有没有人可以找到任何新的错误或帮助?非常感谢。感谢。

#include<stdio.h>
#include<stdlib.h>

/*Multiples of 3 and 5
If we list all natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6
and 9. The sum of these multiples is 23.
Find the sum of all the multiples of 3 or 5 below 1000.*/



int cd_function(int n, int sum)
{

    if(sum >= 1000)
        return 0;

    if(n%3 == 0 || n%5 == 0)
            sum + return cd_function(n, sum);
}


int main(void)
{
    int i, iter, sum = 0;

    for(i = 0; i < cd_function(iter, sum); i++)
        sum++;

    return 0;
}

1 个答案:

答案 0 :(得分:0)

#include<stdio.h>
#include<stdlib.h>

大多数人会在这里添加空格:

#include <stdio.h>
#include <stdlib.h>

int cd_function(int n, int sum)
{

    if(sum >= 1000)
        return 0;

    if(n%3 == 0 || n%5 == 0)
            sum + return cd_function(n, sum);
}

有两种方法,让这个函数将n加到sum:通过将sum作为指针(引用)传递,这将以这种方式完成:

void cd_function(int n, int * sum) {
    // if (*sum >= 1000) - no need to test this here
    if (!n%3 || !n%5) {
        *sum += stuff;
    }
}

或让函数返回新的总和:

int cd_function(int n, int sum) {
    // if (sum >= 1000) - no need to test this here
    if (!n%3 || !n%5) {
        return sum + stuff;
    } else {
        return sum;
    }
}

现在,sum + return cd_function(n, sum);是错误的,YSC已在评论中说明了这一点。因此,您应该使用*sum += n;return sum + n;(即将stuff替换为上面的n)。

int main(void)
{
    int i, iter, sum = 0;

因为你不需要iter,所以摆脱它:

    int i, sum = 0;

    for(i = 0; i < cd_function(iter, sum); i++)
        sum++;

一个。如果你想总结一些[tm] i s,那么你不应该在每次迭代中增加sum

    for (i = 0; i < cd_function(iter, sum); i++)
        ;

湾然后你应该得到一个适当的退出条件。你想要总结所有东西,直到你得到一个&gt; = 1000的总和,所以在条件中写下:

    for (i = 0; sum < 1000; i++)
        /* ??? i < cd_function(iter, sum) */;

℃。根据您从上面选择的cd_function的实现,您现在可以调用

        cd_function(i, &sum);

        sum = cd_function(i, sum);

d。最后,你应该添加大括号,即使只有一个语句:

    for (i = 0; sum < 1000; i++) {
        // option 1
        cd_function(i, &sum);
        // option 2
        sum = cd_function(i, sum);
    }

休息很好:

    return 0;
}