Java两种方式求 1+1/2!+1/3!+1/4!+... 前20项的和:
感叹号 !是阶乘的意思,如 2! 、3! 、4! 分别是:1*2 、 1*2*3 、1*2*3*4
第一种算法,如下代码演示:
double sum=0,number=1;
for(int i=1;i<=20;i++) {
number= number * (1.0/i) ;
sum += number;
}
System.out.println("使用for循环计算的sum="+sum);
// 结果输出:使用for循环计算的sum=1.7182818284590455
第二种算法,如下代码演示:
double sum=0,number=1,a=1;
for(int i=1;i<=20;i++) {
a = 1.0 / i ;
number *= a ;
sum=sum+number;
}
System.out.println("使用for循环计算的sum="+sum);
// 结果输出:使用for循环计算的sum=1.7182818284590455
特别注意,防止出现 1+1/2+1/3+1/4+... 前20项的和 的情况:
如下代码:
double sum=0,a=1;
for(int i=1;i<=20;i++) {
a= 1.0 / i ;
double number = 1;
number *= a ;
sum=sum+number;
}
System.out.println("使用for循环计算的sum="+sum);
// 结果输出:使用for循环计算的sum=3.597739657143682
在以上代码中,number = 1 是在for循环体中进行声明的,则每次循环的时候都会重新声明一次number,即每次循环number的值都是从 1 开始的,所以就出现了1+1/2+1/3+1/4+... 前20项的和 的情况;
用for、while、do-while分别实现1+1/2!+1/3!+1/4!+...前20项的和
for 进行实现:
double sum=0,number=1;
for(int i=1;i<=20;i++) {
number= number * (1.0/i) ;
sum += number;
}
System.out.println("使用for循环计算的sum="+sum);
while 进行实现:
double sum = 0,number = 1,i = 1 ;
while (i <= 20) {
number = number * (1.0 / i);
sum += number;
i++;
}
System.out.println("使用for循环计算的sum="+sum);
do-while 进行实现:
double sum = 0, number = 1, i = 1;
do{
number = number * (1.0 / i);
sum += number;
i++;
}while (i <= 20);
System.out.println("使用for循环计算的sum="+sum);
编程练习扩展:
一、求 1!+ 2!+ 3!+ 4!+....+ 20! 的和;
实现代码如下: 代码输出: 1!+2!+3!+...+20!等于=268040729
int sum = 0 ,number = 1;
for(int i=1;i<=20;i++){
number *= i;
sum += number;
}
System.out.println(" 1!+2!+3!+...+20!等于="+sum);
二、求满足 1+2+3+4+...+n<8888 的最大正整数 n ;
实现代码如下: 代码输出: 1+2+3+4+...+n<8888的最大正整数为=133
for语句实现
int sum = 0,n = 1;
for(int i=1;i<=n;i++){
if(sum<8888){
sum += i;
}
if(sum>=8888){
System.out.println("1+2+3+4+...+n<8888的最大正整数为="+n);
break;
}
n++;
}
while语句实现
int n=1;
long sum=0;
while(true) {
sum=sum+n;
n++;
if(sum>=8888) {
System.out.println("1+2+3+4+...+n<8888的最大正整数为="+(n-1));
break;
}
}