有什么办法可以在不增加变量的情况下解决这个数学问题吗?

Is there any way to solve this math problem without additional variables?

所以我要实现这种算法:

i0 开始,步长为 1,并且必须有 n 次迭代。 输入为 xn。输出是 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 使用情况。