没有其他变量,有没有办法解决这个数学问题?

时间:2019-05-02 18:39:40

标签: c algorithm math pseudocode flowchart

所以我必须实现这种算法:

P(x):=\prod_{i=0}^{n}\frac{(-1)^i}{x^i}

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

3 个答案:

答案 0 :(得分:3)

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用于分子和分子。

enter image description here 其中Z是从1到n-1的算术级数的总和,其共同差等于1。

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

答案 2 :(得分:0)

Original formula

这是原始公式。这是关于产品,而不是总和。非常感谢你们的努力和回答。我想不使用其他变量来解决此问题,因为教授总是警告我们有关内存和CPU使用情况的信息。