祝您一切顺利 如果您能解决这个问题,我会很高兴... Thnx
Console.WriteLine("Enter two Numbers to start the Equation (X=Number , N=Power)" + "");
int X = int.Parse(Console.ReadLine());
int N = int.Parse(Console.ReadLine());
double sum = 0;
double up = 1;
int down = 1;
double sentence;
for (int i = 1; i < N; i++)
{
up = Math.Pow(X, N);
down = N * i;
sentence = up / down;
sum += sentence;
}
Console.WriteLine("The Sum is : " + sum);
我希望该数学公式以C#方式完成。 我的代码正在运行,但我得到错误的答案... 您能帮我修复它吗?
答案 0 :(得分:0)
n!代表阶乘。请参阅Factorial以了解有关阶乘的信息。
C#中的样本阶乘函数如下:
long Factorial(long value)
{
if (value == 0)
return 1;
return value * Factorial(value - 1);
}
此外,以下行需要更正。
up = Math.Pow(X, N);
指数部分需要根据您的公式增加。必须是
up = Math.Pow(X, i);
答案 1 :(得分:0)
使用此:
Console.WriteLine("Enter two Numbers to start the Equation (X=Number , N=Power)" + "");
int X = int.Parse(Console.ReadLine());
int N = int.Parse(Console.ReadLine());
double sum = 0;
double up = 1;
int down = 1;
double sentence;
for (int i = 1; i <= N; i++)
//Change < to <=
{
up = Math.Pow(X, i);
//This is a for loop i created to get the factorial of any number, sometimes creating your own functions may be worth it
for (int a = N, a > 0, a--)
{
//Function of this Loop : multiply the value of the denominator by its value - 1 to get the factorial of the number
down *= a;
}
sentence = up / down;
sum += sentence;
}
Console.WriteLine("The Sum is : " + sum);
答案 2 :(得分:0)
您实际上可以将其简化很多。但是首先,您现有代码的问题在于您没有正确计算i!
。您现在正在实际计算的顺序是:
X^N / N + X^N / (2 * N) + X^N / (3 * N) + ... + X^N / ((N - 1) * N)
几件事:
-循环中存在一对一的问题
-分子被提高到错误的幂
-这些的分母必须为i!
通过简单的递归关系定义框架:
i! = i * (i - 1)!
和0! = 1
或者换句话说,是前i
个连续自然数的乘积。因此,纠正此问题的一种方法是创建一个称为Factorial的方法:
static long Factorial(int i)
{
long product = 1;
while (i > 0) {
product *= i;
--i;
}
return product;
}
然后您可以通过以下方式修复循环:
for (int i = 1; i < N; i++)
{
sum += Math.Pow(X, i) / Factorial(i);
}
但是,我们在循环的每个迭代中都不需要做很多工作。这就是简化的地方。第i
项的通用公式是:
C[i] = X^i / i!
但是我们也可以用之前的术语来写:
C[i] = C[i-1] * X / i
所以我们可以这样重写循环:
double lastTerm = 1;
for (int i = 1; i <= N; ++i)
{
// Cast to double here or, probably better, make X a double in the first place.
lastTerm *= (double) X / i;
sum += lastTerm;
}
这有几个优点:
Math.Pow
计算任意幂,因此它比乘法要慢一些)。long
中,因此,如果您的N
太大,一切都会破裂。答案 3 :(得分:-4)
战利品错误,应该增加价值
up = Math.Pow(X, i);