public class ComE

  static int jiechen(int n)
  {  
    int i,a=1;
    for(i=1;i<=n;i++)
    {
      
      a*=i;
     }
     return a;
    }
   static double sum(int n)
   {
     int i,b=0;
     for(i=1;i<=n;i++)
     {
      b+=(double)(1/jiechen(i));
      }
      return b;
    }
    public static void main(String[] args)
    {
      System.out.println("the answer is"+sum(7));
     }}
1+1/2!+1/3!+1/4!+。+1/N!
此处我设置为求N=7的结果,执行后却为1。0
请问哪儿出了问题,该如何改?

解决方案 »

  1.   

    晕。
    在J2SE1。4。2下结果为1。0,
    结果比预期的小,当n=2是已经是1。5了哦
      

  2.   

    b+=(double)(1/jiechen(i));
    中jiecheng(i)为int,所以1/jiechen(i)还是int,若jiechen(i)<1答案就为0,转化为double还是0,答案当然就是1了阿(1是当jiechen(i)=1时加上去的)
      

  3.   

    写错了,应该是:b+=(double)(1/jiechen(i));
    中jiecheng(i)为int,所以1/jiechen(i)还是int,若jiechen(i)>1答案就为0,转化为double还是0,答案当然就是1了阿(1是当jiechen(i)=1时加上去的)
      

  4.   

    最好用BigDecimal来算除法那一块。并且射定保留小数位数至少4位以上,因为1/7!时就已经在小数位5位上了。
      

  5.   

    static BigDecimal jiechen(int n)
      {  
        int i,a=1;
        for(i=1;i<=n;i++)
        {
          
          a*=i;
         }
         return new BigDecimal(a);
        }
      static BigDecimal sum(int n)
       {
         int i=0;
         BigDecimal b=new BigDecimal(0);
         final BigDecimal c=new BigDecimal(1);
         for(i=1;i<=n;i++)
         {
         
          b=b.add(c.divide(jiechen(i),5,5));
          }
          return b;
        }
        public static void main(String[] args)
        {
          System.out.println("the answer is:"+sum(7));
         }