C# 我怎样才能用C写这个公式?(我的编码方式有什么问题?)
希望你一切顺利 如果你帮我解决这个问题,我会很高兴的。。。Thnx 我为公式编写了以下代码:“C# 我怎样才能用C写这个公式?(我的编码方式有什么问题?),c#,math,formula,C#,Math,Formula,希望你一切顺利 如果你帮我解决这个问题,我会很高兴的。。。Thnx 我为公式编写了以下代码:“ Console.WriteLine(“输入两个数字来启动方程(X=Number,N=Power)”+”; intx=int.Parse(Console.ReadLine()); int N=int.Parse(Console.ReadLine()); 双和=0; 双向上=1; int-down=1; 双重判决; 对于(int i=1;i
Console.WriteLine(“输入两个数字来启动方程(X=Number,N=Power)”+”;
intx=int.Parse(Console.ReadLine());
int N=int.Parse(Console.ReadLine());
双和=0;
双向上=1;
int-down=1;
双重判决;
对于(int i=1;i
我想用C#的方式来做这个数学公式。。。。 我的代码正在运行,但我得到了错误的答案。。。
你能帮我修一下吗?功率有问题,应该增加值
up = Math.Pow(X, i);
n!表示阶乘。请参阅阅读有关阶乘的内容 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);
使用以下命令:
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);
Console.WriteLine(“输入两个数字来启动方程(X=Number,N=Power)”+”;
intx=int.Parse(Console.ReadLine());
int N=int.Parse(Console.ReadLine());
双和=0;
双向上=1;
int-down=1;
双重判决;
对于(int i=1;i您实际上可以将其简化很多。但首先,现有代码的错误在于您没有正确计算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
连续自然数的乘积。因此,纠正这种情况的一种方法是创建一个称为阶乘的方法:
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);
}
这有几个优点:
- 它通常会更快,因为我们每次迭代所做的工作更少(
Math.Pow
计算任意幂,所以它比仅仅乘法要慢一些)
- 它将不太容易出现数字问题。阶乘变得非常大,非常快。事实上,21!已经太大,无法存储在
长的中,因此如果N
大于此值,一切都将崩溃
请提供示例输入、当前输出和预期输出您的down
是错误的。例如4!
应该是4*3*2*1
而不是4*i
您的down
计算看起来不正确。您链接的公式表明每个循环中的i!
应该是错误的。相反,您正在执行N*i
。此外,您的循环应该是for(int i=1;i首先,您得到了错误的结果,因为分母(变量down
)是错误的。根据图像,分母应该等于计数器的阶乘,即数学术语down=i!。(注意:感叹号不是正确的C#运算符)。作为一个快速解决方案,您可以插入一个嵌套循环,从1到i对j进行迭代,并将所有的j相乘。但是,我不建议这样做,因为整个公式似乎在数值上并不稳定。即使您修复了公式中的明显错误,结果也可能会让您感到惊讶。up=Math.Pow(X,i);down=down*i;
…和我注意到,你获得了否决票,因为你的答案完全是错的。你不能只修正一小部分,然后期望这就足够了。答案必须完整。答案必须完整,否则就没有用。你所说的是正确的,但你可以把它作为一个评论来写,因为它不正确回答被问到的问题。我不想在这里显得刻薄,但我已经在这里呆了很长时间,知道什么是一个好的答案…好吧,我试图帮助你,但你没有听。现在你有三个人都同意这是一个糟糕的答案。至于你链接的问题,看看这些答案中有多少细节?哦,讽刺的是,比较一下这些答案中的任何一个这些问题的答案都是你在这里提供的“答案”。这让我难以置信。这些答案中的任何一个都提供了大量关于“他们的”的信息、知识和背景问题比这里的两条线对手头的问题的作用要大。然而,我们在这里,假装其他答案的形状或形式与这里的类似。你的函数不起作用…阶乘(13)返回1 932 053 504,这是错误的OOOPS,感谢您指出Selvin。“int”是罪魁祸首,我已更正了代码My抱歉@Selvin。数据类型的限制在代码中很明显。但想法的关键是强调需要查看的关键区域,因为公式的解释方式存在问题,尤其是指数和事实RIAL。没有解释的代码转储在这里是没有用的。你认为这个答案给出了什么,而现有的答案没有?代码转储就是字面上的代码转储。在这种情况下,它意味着你应该解释代码在做什么,这才是一个好答案。i@Selvin好眼力,也是对的,但我明白前男友的意思了ercise是通过计算部分和来证明这一事实的一部分,所以我没有提到它。
for (int i = 1; i < N; i++)
{
sum += Math.Pow(X, i) / Factorial(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;
}