这是我应该做的:
编写一个程序,该程序读取一个正整数并显示最大正整数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;
}
感谢帮助!
答案 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
一起使用。