我正在尝试编写一个程序,提示用户输入数字x
,并找到最大的n
满足以下等式:
1²+2²+3²+ ... + n
²< x
。
首先,我需要知道我的程序出错了什么,我一直试图将它修改几个小时才能获得无限循环等等。我知道这是我逻辑中的错误;我只需要知道用什么逻辑来完成问题。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int number;
printf("Please enter a number\n");
scanf("%d", &number);
double c = 1; // stores number
double n = 0;
while (n < number)
{
n = c + pow(c, 2);
c++;
}
printf("The largest n is %lf\n", c);
printf("%lf", n);
return 0;
}
答案 0 :(得分:1)
你在这里。
#include <stdio.h>
int main( void )
{
while ( 1 )
{
printf( "Enter a positive number (0-exit): " );
unsigned int number;
if ( !( scanf( "%u", &number ) == 1 ) || number == 0 ) break;
unsigned int n = 0;
unsigned long long sum = 0;
while ( ( sum + ( unsigned long long )( n + 1 ) * ( n + 1 ) ) < number )
{
++n;
sum += ( unsigned long long )n * n;
}
printf( "The largest n is %u and the corresponding sum is %llu\n", n, sum );
}
}
如果要输入例如65
然后输入0
,那么输出可能会显示为
Enter a positive number (0-exit): 65
The largest n is 5 and the corresponding sum is 55
Enter a positive number (0-exit): 0
如果您愿意,可以将变量number
的类型从unsigned int
更改为double
。在这种情况下,您需要做的就是更改scanf
的格式说明符。
至于你的程序,那么循环本身
while (n < number)
{
n = c + pow(c, 2);
c++;
}
是错误的,因为在循环内n
可能会变得大于数字,c
会增加。
也代替
n = c + pow(c, 2);
必须有
n += c * c;
答案 1 :(得分:1)
你应该使用整数而不是双倍,并记住最后递减c(因为最后一个c是第一个实际上比输入更大的)。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
int number;
printf("Please enter a number\n");
scanf("%i", &number);
int c = 1; // stores number
int n = 0;
while (n < number) {
n += c*c;
c++;
}
printf("The largest n is %i\n", --c);
return 0;
}
答案 2 :(得分:0)
我认为您的程序没有计算正确的c
值,如果您只是在每次迭代中向c
添加1,那么最后c
将等于迭代次数,试试这个
#include <stdio.h>
#include <math.h>
int
main(void)
{
double x = 0;
double y = 0;
double z = 0;
if (scanf("%lf", &x) != 1)
return -1;
for (double n = 0 ; y < x ; ++n)
{
z = y; // Store the value before `y' >= `x'
y = y + pow(n, 2); // Update `y'
}
fprintf(stdout, "%f\n", z);
return 0;
}
答案 3 :(得分:0)
n = c + pow(c, 2);
不做您认为会做的事情。为了正确地求和该值,因为您从未正确保存过以前的总和。
int main(void) {
int number;
printf("Please enter a number\n");
scanf("%d", &number);
double c = 1; //stores number
double n = 0;
double prev = 0;
while (n<number)
{
prev = n;
n += pow(c, 2);
c++;
}
printf("The largest n is %lf\n", prev);
return 0;
}