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;
}

感谢您的帮助!

你可以试试这个

#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= %dn", sum);
return n;
}
int main ()
{
printf("Print your number:");
int n;
scanf("%d", &n);
int max_integer = max_positive_integer(n);
printf("max_integer = %dn", max_integer);
return 0;
}

如何在循环中对一系列平方求和是容易的部分

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

诀窍是何时停止给定"总和...小于给定的数字。

代码可以使用

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的立方根


如果你想避免循环,研究前n平方和


正如@user4581301评论的那样,将"%u"unsigned一起使用。

最新更新