所以我必须实现这种算法:
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;
}
答案 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用于分子和分子。
答案 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)
这是原始公式。这是关于产品,而不是总和。非常感谢你们的努力和回答。我想不使用其他变量来解决此问题,因为教授总是警告我们有关内存和CPU使用情况的信息。