JavaSE习题 计算1-1/2+1/3-1/4+1/5...+1/99-1/100的值

JavaSE习题 计算分数之和

问题描述:计算1-1/2+1/3-1/4+1/5...+1/99-1/100的值。

问题分析:

方法一:

  此题目需要使用循环计算, 根据观察我们可以发现三点:

       a. 式子的分子全为1不变,所以我们在编程过程中可以吧分子当为一个常数,不用设置变量。

       b. 式子的分母从1-100依次发生改变,所以我们在编程过程中需设置一个变量。

       c. 分母为2的倍数的时候,此数在式子中变为负数相加;(sum +=-(分子/分母))

           而分母不是2的倍数的时候,此数在式子中直接相加。(sum +=(分子/分母))

  但是,我们需要注意 :

         分数相加的值可能不是整数,所以设置变量时不能用int,而要用double,防止发生计算误差。   

所以可得到如下代码:

public class TestDome {
    public static void main(String[] args) {
       double sum = 0;
       double b = 1.0;
       while(b<=100){
           if(b % 2 ==0){
               sum += -(1.0/b);
           }else
           {
               sum +=(1.0/b);
           }
           b++;
       }
       System.out.println("sum的值为" + sum);

    }
}

运行结果如下:

方法二: 

  此题目需要使用循环计算, 根据观察我们可以发现:

    a. 式子的分子全为1不变,所以我们在编程过程中可以吧分子当为一个常数,不用设置变量。

    b.每个数相加时前面的正负号不同,会交替出现,所以我们可以设置一个变量k,来控制数字的正负号。

       即先把k设置为整数1,然后在循环里面加上k=-k;语句即可控制数字的正负号。

所以可得到如下代码:

public class TestDome {
    public static void main(String[] args) {
       double sum =0;
       int k=1;

        for (int i = 1; i <=100 ; i++) {
            sum += 1.0/i *k;
            k=-k;
        }
        System.out.println("sum的值为" + sum);

    }
}

运行结果如下:

方法三: 

此题目需要使用循环计算, 根据观察我们可以发现:

    a. 式子的分子全为1不变,所以我们在编程过程中可以吧分子当为一个常数,不用设置变量。

    b.我们可以将式子拆分为 (1/ i - 1/ j)的模式然后相加。可以发现 i 与 j 的关系其实是 j =i +1;。

       所以我们可以把(1/ i - 1/ j)这块单独设置一个函数,然后在主函数中重复调用即可,这里的重复调用必定要用到循环。

    c.因为这个思路会存在j =i +1,所以i的取值不能等于100,到99就可以了。

 但是我们需要注意:

         调用一次函数,其实用了2个 i ,所以我们的i在循环时要加2才正确,才是下一个小式子的重新开始。

所以可得到如下代码:

public class TestDome {
    public static double fun(int i,int j){
      double ret= 1.0 /i -1.0/j;
       return ret;
    }
    public static void main(String[] args) {
       double sum =0;
        for (int i = 1; i <100 ; i+=2) {
            sum += fun(i,i+1);
        }
        System.out.println("sum的值为" + sum);

    }
}

运行结果如下:

  • 13
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值