java编程题50道(5)

程序21

题目:求1+2!+3!+…+20!的和

题目思路:

先以函数实现阶乘,在主函数通过for循环累计阶乘(注意阶乘过大,应使用double) n!=n*(n-1!)

 1 package test;
 2 
 3 import java.util.Scanner;
 4 public class hello {
 5     
 6     public static double jiecheng(Double a) {//定义阶乘函数
 7         double sum=1;
 8         for (int i = 1; i <= a; i++) {//因为后面20的阶乘太大了所以实用double
 9             sum*=i;
10         }
11         return sum;
12     }
13     public static void main(String[] args) 
14     {
15         Scanner in=new Scanner(System.in);
16         double sum=0;
17         for (double i = 1; i < 20; i++) {
18             sum+=jiecheng(i);//累加
19         }
20         System.out.print("总和为:"+sum);//输出
21     }
22 }    

程序22

题目:利用递归方法求5!。

题目思路:

根据上题给出进行更改,公式为n!=n*(n-1!)

 1 package test;
 2 
 3 import java.util.Scanner;
 4 public class hello {
 5     
 6     public static double jiecheng(int a) {//定义阶乘函数
 7         int sum=1;
 8          if (a==1) {//给与1初始值
 9 
10                return 1;
11          }
12         for (double i = 1; i <= a; i++) {//
13             sum*=i;
14         }
15         return a*jiecheng(a-1);//根据阶乘公式输出
16     }
17     public static void main(String[] args) 
18     {
19         Scanner in=new Scanner(System.in);
20         double sum=jiecheng(5);
21         System.out.print("总和为:"+sum);//输出
22     }
23 }    

程序23

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

题目思路:

与之前一样,减少阶乘,改为年龄减2

 1 package test;
 2 
 3 import java.util.Scanner;
 4 public class hello {
 5     
 6     public static double jiecheng(int a) {//定义函数
 7         int sum=10;
 8          if (a==1) {//给与1初始值
 9 
10                return 10;
11          }
12         for (double i = 1; i < a; i++) {//每次减2
13             sum-=2;
14         }
15         return sum;//返回值
16     }
17     public static void main(String[] args) 
18     {
19         Scanner in=new Scanner(System.in);
20         double sum=jiecheng(5);
21         System.out.print("总和为:"+sum);//输出
22     }
23 }    

程序24

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

题目思路:

先确定位数后,将数字倒入数组中,后使用for循环逐个取出

 1 package test;
 2 
 3 import java.util.Scanner;
 4 public class hello {
 5     
 6     public static void main(String[] args) 
 7     {
 8         Scanner in=new Scanner(System.in);
 9         int x=in.nextInt();//确定位数
10         int []list =new int [x];
11         for (int i = 0; i < x; i++) {//将数字导入数组
12             list[i]=in.nextInt();
13         }
14         for (int i = x-1; i >=0; i--) {//逆序输出
15             System.out.print(list[i]+" ");
16         }
17         System.out.println("是"+x+"位数");//输出位数
18         
19     }
20 }    

程序25

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

题目思路:

已经知道是五位数,就懒得再用scanner了,偷下懒直接用数组判断就行,

若需要还是以为for循环进行判断,输入i个数,0与i,1与i-1

 1 package test;
 2 
 3 import java.util.Scanner;
 4 public class hello {
 5     
 6     public static void main(String[] args) 
 7     {
 8         Scanner in=new Scanner(System.in);
 9         int []list =new int [5];
10         for (int i = 0; i < 5; i++) {//将数字导入数组
11             list[i]=in.nextInt();
12         }
13         
14             if (list[0]==list[4]&&list[1]==list[3]) {//判断
15                 System.out.println("是回文数");
16             }
17         
18     }
19 }    

 

posted @ 2021-07-15 16:16  诶楼勾勾  阅读(51)  评论(0)    收藏  举报