繁体   English   中英

如何修复“e = 1 + 1/1的代码! + 1/2! + 1/3! + ... + 1 / n! “?

How to fix the code for “ e = 1 + 1/1! + 1/2! + 1/3! + … + 1/n! ”?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

这就是我想出的:

#include <stdio.h>

int main (void)
{
  int n, i, j;
  float e = 1.0, nFact = 1.0;

  printf ("please enter the number");
  scanf ("%d", &n);

  for (i = 1; i <= n ; i++)
  {
    for (j = 1; j <= i; j++)
    {
      nFact *= j;
    }
    e = e + (1.0 / nFact);
  }

  printf ("The value of 'e' is : %f", e);
  return 0;
}

这是我从这段代码中得到的。 输入:3输出:2.58333(接近2.6666 ...)

但是对于n = 3,e应该给出2.6666 ..作为值。

我在这里做错了吗? 如何获得正确的输出?

3 个回复

你不必要地在每次迭代中计算阶乘。 只需用nFact *= i;替换内部循环nFact *= i;

#include<stdio.h>

int main (void)
{
int n,i,j;
float e=1.0, nFact=1;

printf("please enter the number");
scanf("%d", &n);

for( i =1; i<= n ; i++)
{
    nFact*=i;
    e = e + (1.0/ nFact);
}

printf("The value of 'e' is : %f", e);

return 0;
}

Am i doing something wrong here?

您忘记将factorial变量设置为1。 所以,你的变量很快变小了。 这使得(1.0 / nFact)更小,这就是为什么你会变小e。

nFact=1.0;     //add this line so it resets to 1.0 everytime a factorial is needed
for( j = 1  ; j <= i; j++)
{
    nFact *= j;
    e = e + (1.0/ nFact);
}
//only single loop is more than enough

你通过O(n)复杂性获得了阶乘。 为什么不保存旧值并在每次迭代中使用它?(O(1)--->不需要阶乘循环。只需使用旧值,因为你没有重置它。(只需乘以i)

how can i get the proper output?

在第11次或第12次迭代之后, float将无法提供足够的精度分辨率最小值。 如果你去科学,那么DoubleBıgDecimal似乎更好。

那个循环是非常低效的:注意你的内循环如何一遍又一遍地计算同样的东西!

相反,您应该保留一个运行的术语并更新它:

double term = 1;
double result = term;

for (unsigned int i = 1; i != n; ++i)
{
    term /= i;
    result += term;
}

printf("With %u steps we compute %f.\n", n, result);
1 系列:1 + 1/3 + 1/5 +...最多 N 项

我最近在编程测试中被问到这个问题。 我似乎无法理解为什么我会得到答案“1”。 我是C编程语言的初学者。 这是我的代码: 我已经尝试过使用for循环,但答案仍然相同。 任何帮助,将不胜感激! ...

4 1.307与系列1 + 1/2 + 1/3 + 1/4…+ 1 / n有什么关系[关闭]

我目前正在浏览Nakov的书《 C#中的计算机编程基础知识》。 在第4章中,问题12指出: 编写一个程序,计算以下序列的总和(精度为0.001):1 + 1/2-1/3 + 1/4-1/5 +… 在我看来,这是一个相对简单的问题。 该级数是递减的,没有渐近线。 由于值变化 ...

2018-07-16 05:47:56 3 119   c#/ math
5 如何修复此e2e测试?

问题是,当您单击“添加规则”按钮时,将获得新的“搜索词”和“搜索文本区域”字段。 但是量角器看不到它们。 错误日志: 单击“添加规则” btn前后的屏幕截图: ...

7 如何使1 +1 = 2而不是1 +1 = 11 [重复]

这个问题已经在这里有了答案: 如何将两个字符串当作数字相加? 20个答案 我正在尝试以数学方式添加数字,但它会不断添加数字。 它获取ID号(begen),然后获取另一个div(kacbegen)内部的数字。 但是,在进行数学运算(toplam)时,它 ...

9 我为什么要修复E_NOTICE错误?

作为开发人员,我开启了E_NOTICE。 最近,我被问到为什么应该修复E_NOTICE错误。 我能想出的唯一理由是纠正这些问题是最佳做法。 是否有其他人有理由证明为纠正这些问题花费的额外时间/成本是合理的? 更具体地说,如果代码已经运行,为什么经理要花钱来修复这些? ...

2011-02-22 03:15:49 5 8409   php
10 修复代码

您好,我想问一下是否有更好的方法将我的代码转换为更好或更快的方法? 如您所见,它是一个嵌套的 if 语句。 我希望它是较少的代码行。 有什么帮助吗? ...

2015-09-03 02:49:56 2 39   ionic
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM