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);
}
}
运行结果如下: