本人刚入门,求解
写出过程代码
s=1-1/2+1/3-1/4+1/5-...
求当s>0.1时的s的值 并打印出全过程

解决方案 »

  1.   

    float s = 1.0;
    System.out.print("s= 1");
    for(int i=1;;i++){
        if(s < 0.1){
            break();
        }
        if(i%2 == 1){
            s = s - 1/(i+1);
            System.out.print("- 1/"+(i+1));
        }else{
            s = s + 1/(i+1);
            System.out.print("+ 1/"+(i+1));    }
    }
      

  2.   

    public class Test { 
            public static void main(String args[]) throws IOException{
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String s=br.readLine();
            double n =Double.parseDouble(s);
            double sum=1;
            for(int i=2;i<n;i++){
                if(sum>0.1){
                if(i%2==0){
                    sum=sum-(1.0/i);
                    System.out.println("sum: "+sum);
                }else{
                    sum=sum+(1.0/i);
                    System.out.println("sum: "+sum);
                }
                }
            }            
            }
            }
      

  3.   

    ls的做法有问题,是死循环了,因为这个数列不可能小于0.1的,而且 s = s - 1 / (i+1)时,这个值永远是1,因为i是int型的 1/(i+1) (i>1)时永远是0,而且代码 if(i%2==1) 也不严谨,似应改为 if(i%2 != 0) 较为严谨些,可以避免负奇数的麻烦。
    lz的问题也是有问题的,s>0.1?那还算什么呀,还没算就大于了0.1,我想应该是计算精度误差大于0.1吧,代码如下:
    public static void main(String[] args) {
      double epsilon = 0.1d; // 计算精度
      double sum = 1.0d;
      double preSum = 0d;
      double error = 1;
      StringBuilder sb = new StringBuilder("s=1");
      for(int i = 1; error > epsilon; i++) {
        preSum = sum;
        if ((i & 1) != 0) {
          sum -= 1.0d / (i + 1);
          sb.append("-1/");
        } else {
          sum += 1.0d / (i + 1);
          sb.append("+1/");
        }
        sb.append(i + 1);
        error = Math.abs(sum - preSum);
        System.out.printf("%s=%.16f (精度误差: %.5f)%n", sb.toString(), sum, error);
      }
    }