两种方式求1+1/2!+1/3!+1/4!+...前20项的和、用for,while,do-while分别实现1+1/2!+1/3!+1/4!+...前20项的和

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;
	        }
	      }
发布了57 篇原创文章 · 获赞 10 · 访问量 7554

猜你喜欢

转载自blog.csdn.net/LagerSwan/article/details/104110526