2-18 分别用for、while和do-while循环语句以及递归方法计算n!,并输出算式

(1)首先建立一个Java项目和Java的类并命名为“阶乘计算”

(2)由于要调用输入函数java.util.Scanner.nextInt()(这个函数是专门提供输入类型为整形的数据),所以要导入包java.util.Scanner,Java语句为import java.util.Scanner

(3)建立一个主函数,新建一个 参数为System.in的Scanner对象 其中名称为 sc,System.in参数是键盘输入内容,Java语句为:Scanner sc = new Scanner(System.in);

(4)设置提示输入n,然后创建一个int类型来传入参数n,然后设置一些中间变量,具体语句是:System.out.print("请输入n:");int num = sc.nextInt();int i=1,n=num,sum=1;其中第二个语句表示将输入的参数赋值给整形i

(5)编写while循环阶乘代码,由于要输出阶乘算式,所以循环中加入了输出语句,这里的代码和c语言相似,不再具体的介绍

(6)do-while和for循环语句与while语句类似,主要是递归方法,首先要在类外建立一个递归方法的类,然后在主函数内调用递归方法并传入参数(我在调用递归方法时添加了异常机制,即如果出现错误就中断操作,并输出异常)

(7)运行程序,输入阶乘n为8,代码和结果如图:

总结心得:

(1)首次学会了调用输入包java.util.Scanner,并掌握了nextInt()函数

(2)为满足输出阶乘算式,必须在每次循环中输出当前循环的乘数以及乘号,最后在添上计算结果

(3)在建立递归函数时,必须要先构造函数,即BigInteger(String val);要注意与c++的构造函数的区别,同时开头要导入包java.math.*

(4)由于阶乘数据量比较大,所以最好要进行异常处理,避免程序卡死

(5)要注意区分while,do-while和for循环中循环次数的控制

源代码如下:

 1 import java.util.Scanner;
 2 import java.math.*;
 3 public class 阶乘 {
 4     public static void main(String[] args){
 5         Scanner sc = new Scanner(System.in);
 6         System.out.print("请输入n:");
 7         int num = sc.nextInt();
 8         int i=1,n=num,sum=1;
 9         System.out.print("while语句的阶乘算式:1");
10         while(i<n){
11             i+=1;
12             sum*=i;
13             System.out.print("*"+i);
14         }
15         System.out.println("="+sum);
16         
17         i=1;sum=1;
18         System.out.print("do-while语句的阶乘算式:1");
19         do{
20             i+=1;
21             sum*=i;
22             System.out.print("*"+i);
23         }while(i<n);
24         System.out.println("="+sum);
25         
26         
27         System.out.print("for语句的阶乘算式:1");
28         for(i=2,sum=1;i<=n;i+=1){
29             sum*=i;
30             System.out.print("*"+i);
31         }
32         System.out.println("="+sum);
33         
34         
35         阶乘 test = new 阶乘();
36         System.out.print("递归方式的阶乘算式:1");
37         for(i=2,sum=1;i<=n;i+=1){
38             
39             System.out.print("*"+i);
40         }
41         try {
42             System.out.println("="+test.bigsum(num));
43         } catch (Exception e) {
44             // TODO Auto-generated catch block
45             e.printStackTrace();
46         }
47 
48             
49         }
50     public BigInteger bigsum(int i) {
51         if (i == 1) {
52             return BigInteger.ONE;
53         }
54         return BigInteger.valueOf(i).multiply(bigsum(i-1));
55     }
56 }
原文地址:https://www.cnblogs.com/fjcy/p/10556836.html