这道题怎么做解释一下,第5题,最好用java解,还有说下什么是步长

2025-05-08 23:44:55
推荐回答(1个)
回答1:

package know;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class T12 {
 public static void main(String[] args) {
   System.out.println(cal("9"));
 }
 public static BigDecimal cal(String xstr) {
  BigDecimal x = new BigDecimal(xstr);
  BigDecimal result = BigDecimal.ONE;
  int end = calend(x);
  System.out.println(end);
  for (int i = 1; i <= end; i++) {
   result = result.add(x.pow(i).divide(calmot(i), 5,
     RoundingMode.HALF_UP));
  }
  return result;
 }
 /**
  * 计算n的最大值 计算到小数点后5位
  * 
  * @return
  */
 public static int calend(BigDecimal x) {
  int m = 1;
  while (x.pow(m).divide(calmot(m), 6, RoundingMode.HALF_UP)
    .compareTo(new BigDecimal("0.00001")) >= 0) {
   m++;
  }
  return m;
 }
 /**
  * 计算分母 m!
  * 
  * @return
  */
 public static BigDecimal calmot(int m) {
  BigDecimal mot = new BigDecimal(m);
  for (int i = m - 1; i > 0; i--) {
   mot = mot.multiply(new BigDecimal(i));
  }
  return mot;
 }
}

x的n次方/n!,肯定是n越大值越小的,题目要求精度计算到小数点后五位,那么当x的n次方/n!的值小于0.00001时,后面的值没必要计算了,根据这个就能得出n的最大值,其他的逻辑就很好实现了


0.2-1.0步长0.2,意思就是x取值0.2,0.4,0.6,0.8,1.0