有什么办法可以在不增加变量的情况下解决这个数学问题吗?
Is there any way to solve this math problem without additional variables?
所以我要实现这种算法:
i
从 0
开始,步长为 1
,并且必须有 n
次迭代。
输入为 x
和 n
。输出是 P
,这是这个公式的乘积。那么,有没有不用额外变量的方法解决呢?
int main() {
int x, exp = 1, n, i, o;
float p = 1;
printf("Input value of x: \n");
scanf_s("%d", &x);
printf("Input value of n: \n");
scanf_s("%d", &n);
for (i = 1; i <= n - 1; i++) {
if (i % 2 == 0)
o = -1;
else
o = 1;
exp = exp * x;
p = p * ((-1*(float)o) / exp);
}
printf("Requested number is: %f\n", p);
return 0;
}
int n = 5;
int x = 20;
float result = pow(-1.0/x, n*(n-1)/2);
结果 = 9.76563e-14
结果 = -3.05176e-20 对于 n=6 和 x= 20
使用 arithmetic progression 作为分子和分母。
其中 Z 是从 1 到 n-1 的等差数列之和,公差等于 1。
您尝试计算的系列似乎不正确。它更有可能是和而不是乘积,因为乘积可以简化为 (-x)-(n*(n+1))/2,对于 x > 1,它迅速向 0 收敛,对于 x = 1,它在 1 和 -1 之间振荡,对于 x < 1,它发散。
可以在没有任何其他局部变量的情况下计算乘积:
printf("Requested number is: %f\n", pow(-x, -n * (n + 1) / 2));
要计算和而不是乘积,即 1 / (1 + x) 的泰勒级数,代码需要一些更改,确实可以使用更少的变量:
#include <stdio.h>
int main() {
int n;
double x, term, sum;
printf("Input value of x: ");
if (scanf_s("%lf", &x) != 1)
return 1;
printf("Input value of n: ");
if (scanf_s("%d", &n) != 1)
return 1;
sum = term = 1.0;
while (n --> 0)
sum += term /= -x;
printf("Requested number is: %f\n", sum);
return 0;
}
Original formula
所以这是原来的公式。这是关于产品,而不是总和。非常感谢你们的努力和回答。我想在没有额外变量的情况下解决这个问题,因为教授总是警告我们内存和 cpu 使用情况。
所以我要实现这种算法:
i
从 0
开始,步长为 1
,并且必须有 n
次迭代。
输入为 x
和 n
。输出是 P
,这是这个公式的乘积。那么,有没有不用额外变量的方法解决呢?
int main() {
int x, exp = 1, n, i, o;
float p = 1;
printf("Input value of x: \n");
scanf_s("%d", &x);
printf("Input value of n: \n");
scanf_s("%d", &n);
for (i = 1; i <= n - 1; i++) {
if (i % 2 == 0)
o = -1;
else
o = 1;
exp = exp * x;
p = p * ((-1*(float)o) / exp);
}
printf("Requested number is: %f\n", p);
return 0;
}
int n = 5;
int x = 20;
float result = pow(-1.0/x, n*(n-1)/2);
结果 = 9.76563e-14
结果 = -3.05176e-20 对于 n=6 和 x= 20
使用 arithmetic progression 作为分子和分母。
您尝试计算的系列似乎不正确。它更有可能是和而不是乘积,因为乘积可以简化为 (-x)-(n*(n+1))/2,对于 x > 1,它迅速向 0 收敛,对于 x = 1,它在 1 和 -1 之间振荡,对于 x < 1,它发散。
可以在没有任何其他局部变量的情况下计算乘积:
printf("Requested number is: %f\n", pow(-x, -n * (n + 1) / 2));
要计算和而不是乘积,即 1 / (1 + x) 的泰勒级数,代码需要一些更改,确实可以使用更少的变量:
#include <stdio.h>
int main() {
int n;
double x, term, sum;
printf("Input value of x: ");
if (scanf_s("%lf", &x) != 1)
return 1;
printf("Input value of n: ");
if (scanf_s("%d", &n) != 1)
return 1;
sum = term = 1.0;
while (n --> 0)
sum += term /= -x;
printf("Requested number is: %f\n", sum);
return 0;
}
Original formula
所以这是原来的公式。这是关于产品,而不是总和。非常感谢你们的努力和回答。我想在没有额外变量的情况下解决这个问题,因为教授总是警告我们内存和 cpu 使用情况。