C语言入门-编程算术算法?

时间:2018-10-09 03:00:37

标签: c

这是我应该做的:

  

编写一个程序,该程序读取一个正整数并显示最大正整数n,其总和1 ^ 2 + 2 ^ 2 + 3 ^ 2 + ... + n ^ 2小于给定的数字。

到目前为止,我只能将所有自然数的和加到n:

#include <stdio.h>

int main ()
{
    unsigned int n;
    int sum = 0;
    int i;

    sum = 0;

    printf("Print your number");
    scanf("%d", &n);

    for (i = 1; i <= n; ++i)
    {
        sum += i;
    }
    printf("sum = %d", sum);

    return 0;

}

感谢帮助!

2 个答案:

答案 0 :(得分:1)

您可以尝试

#include <stdio.h>

int max_positive_integer(int given_number)
{
    int sum = 0;
    int n = 1;
    while (sum < given_number) {
        sum += n * n;
        n++;
    }

    printf("sum= %d\n", sum);
    return n;
}

int main ()
{
    printf("Print your number:");
    int n;
    scanf("%d", &n);

    int max_integer = max_positive_integer(n);
    printf("max_integer = %d\n", max_integer);
    return 0;
}

答案 1 :(得分:0)

如何简单地将一系列正方形求和是一个简单的部分

sum = 0;
for (n=0; TBD; n++) {
  sum += n*n;
}
printf(..., n);

诀窍是何时停止给定的“ sum ...小于给定的数字”。

代码可以使用

for (n=0; sum + n*n < given_number; n++) {
  sum += n*n;
}
n--;

这可以起到一定作用,但似乎是多余的。问题在于sum + i*i可能会溢出。也许每次都减去i*i,因为我们不需要报告总数,只需n即可。

for (n=0; n*n < given_number; n++) {
  given_number -= n*n;
}
n--;

这样做的好处是,随着n*n的增加,右侧的比较会变小,但是n*n不会溢出。注意:n将与given_number

的立方根成

如果要避免循环,请研究Sum of First n Squares


@user4581301所述,将"%u"unsigned一起使用。