当前位置: 首页 > 知识库问答 >
问题:

对于X项,求P = (2!/1) (!4/2) - (!6/3) ...我的代码适用于所有的测试,只有一个例外

芮星海
2023-03-14

对于这个公式

我必须制定一个方法来自动化它,我已经收到了4个例子来尝试它。

x=1

x=3

x = 4

然而,当我插入11时,答案应该是3.0198773447,我收到的是-1.78316945E8:/

这是我的代码:

System.out.println("Insira o numero: ");
    int x = input.nextInt();
    int fat = 1;
   int contador = 0;
   int contador1 = 0;
   double p  = 0;
  for(double i = 1; i <=x; i++){
    fat = 1;
    contador++;
    contador1 = contador* 2;
    for(double j = 1; j <= contador1; j++){
      fat *=j;

    }
    if(contador <=1){
      p += fat / contador;
    }
    if(contador % 2 ==0 && contador > 1){ 
    p += fat / contador;
    }else if( contador % 2 != 0 && contador > 1){
      p -= fat / contador;
    }
  }
  System.out.println(p);

共有1个答案

鲁望
2023-03-14

如果您输入11,这意味着contador1将变高到22(您将循环11次,每个循环您首先增加contador,并且contador1是它的两倍,所以,22。换句话说,您最终将不得不计算22!。

< code>int类型不包含任何任意整数。它只能保存-2^31和2^31-1.之间的整数如果你试图超越这些界限,它只会循环往复。见证它的行动:

int x = Integer.MAX_VALUE; // a constant representing 2^31-1.
int y = x + 1;
System.out.println(x);
System.out.println(y);

// Prints: 2147483647
//        -2147483648

那个负号是从哪里来的?这就是整件“绕圈子”的事。22! 比这个上限大得多。因此,您的代码不起作用,这也解释了为什么您的算法在其中抛出负数。

您可以选择使用<code>long</code>来代替它,因为它可以容纳它,但<code>long</code>也有限制,精确地说是-2^63-1。您可以使用双精度,它可以走得更远(大约1e308比2^63多得多),但双精度不准确,当您远离0时,精度的缺乏会变得更糟。超过2^53左右,双精度</code>范围内的两个可表示数字之间的距离大于1,这意味着,<code>1</code>不再html" target="_blank">执行任何操作(对<code>double</code>值的所有操作在每次操作后都四舍五入到最接近的可表示双精度)。

更一般地说,尝试对非常大的数字做“数学”不是一件小事,您的基本< code> 和< code>/已经不能完成这项工作了。查找< code>BigDecimal的API,它保证您以自然的性能为代价获得完美的准确性。你可以利用这一点,得到完美的答案。虽然这需要一段时间。

 类似资料:
  • 我正在尝试对除最后2列之外的所有列使用*Ngif,我已经尝试了几个小时了,但是到目前为止什么都没用。< code>listaMonthsNames的元素数量相同,因为当前月份检查变量是一个设置为false的布尔值 当我单击它时,我也得到了一个复选框,它显示了数组列表的所有月份,如果我再次单击它,它会隐藏所有月份,但我希望它使过去 2 个月可见

  • 给定一个大小为N的数组A,您需要找到它的最大值、第二最大值和第三最大值元素。尝试在每个测试用例中以O(N)求解它 输入 输入的第一行包含测试用例的数量T。 对于每个测试用例,输入的第一行包含一个整数N,表示数组A中的元素数。下一行包含A的N个(空格分隔)元素。 在我的代码中,除了一个显示MLE的测试用例之外,每个测试用例都通过了。

  • 我对代码有问题,因为它不能正常工作。这部分代码在第一个播放器上运行时有效 当第二个玩家接触水时,什么也没有发生。没有错误。下面是完整的代码: 我很确定第二个玩家的“结束”是真的,所以它不会这样做。

  • 我需要对表的总数进行断言,当我在映像表中为总数编写XPath时,这样做对所有场景都不起作用。我知道原因,因为表是动态的,所以有时它只有1个图像,有时它有5个图像,所以我很难编写适用于所有场景的x路径。 对于我所写的附加图像:在这里输入图像描述WebElement totalElement=driver。findElement(By.xpath(“/*[@id=“image_table”]/tbod

  • 有没有一个Java库可以解决像下面例子这样的方程: 方程式:600x*0.21x=1500 预期产出:3.45033 方程式:600x*0.21x 200x=1500 预期产出:2.74678 方程式:600x*0.21x1000 = 1500 预期产出:1.99205 方程式:600x*0.21=1500 预期产出:11.9048 基本上,任何方程只有一个未知变量(x),但变量在方程中出现多次。

  • 题目链接 NowCoder 题目描述 要求不能使用乘除法、for、while、if、else、switch、case 等关键字及条件判断语句 A ? B : C。 解题思路 使用递归解法最重要的是指定返回条件,但是本题无法直接使用 if 语句来指定返回条件。 条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会去执行第二个条件语句。利用这一特性,将递归的返回条件取非然后作为