本文编写于 92 天前,最后修改于 92 天前,其中某些信息可能已经过时。

【程序21】TestJieCheng.java
题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘

package test50;

/**
 * @author VellBibi
 *【程序21】TestJieCheng.java 
 *题目:求1+2!+3!+...+20!的和 
 *1.程序分析:此程序只是把累加变成了累乘。
 */
public class TestJieCheng {

    /**
     * 求n的阶乘
     * @param n
     * @return
     */
    public static long jieCheng(int n){
        if(n == 1) return 1;
        else return jieCheng(n-1)*n;
    }
    
    public static void main(String[] args) {
        long ans = 0;
        for(int i=1; i<=20; i++){
            ans = ans + jieCheng(i);
        }
        System.out.println(ans);
    }
}

【程序22】
题目:利用递归方法求5!。 TestJieCheng2.java
1.程序分析:递归公式:fn=fn_1*4!

递归函数详见【程序21】

public static long jieCheng(int n){
    if(n == 1) return 1;
    else return jieCheng(n-1)*n;
}

【程序23】TestAge.java
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

package test50;

/**
 * @author VellBibi
 *【程序23】TestAge.java
 *题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。
 *问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
 *1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。
 */
public class TestAge {

    /**
     * 获取第n个人的岁数
     * @param n
     * @return
     */
    public static int getAge(int n){
        if(n == 1) return 10;
        else return getAge(n-1) + 2;
    }
    
    public static void main(String[] args) {
        System.out.println(getAge(5));
    }
}

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

package test50;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

/**
 * @author VellBibi
 *【程序24】TestNumber.java
 *题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
 */
public class TestNumber {

    /**
     * 分解数字
     * @param n
     * @return
     */
    public static List<Integer> explodeNumber(long n){
        List<Integer> l = new ArrayList<Integer>();
        
        long cup = n;
        while(cup != 0){
            l.add((int) (cup%10));
            cup = cup/10;
        }
        
        return l;
    }
    
    public static void main(String[] args) {
        System.out.println("给一个不多于5位的正整数:");
        Scanner s = new Scanner(System.in);
        long n = 0;
        if(s.hasNext()) n = s.nextInt();
        
        List<Integer> l = explodeNumber(n);
        System.out.println("它是"+l.size()+"位数");
        Iterator<Integer> it = l.iterator();
        while(it.hasNext()){
            System.out.print(it.next());
        }
    }
}

【程序25】 HuiWenShu.java
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

package test50;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author VellBibi
 *【程序25】 HuiWenShu.java
 *题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
 */
public class HuiWenShu {
    
    /**
     * 分解数字
     * @param n
     * @return
     */
    public static List<Integer> explodeNumber(long n){
        List<Integer> l = new ArrayList<Integer>();
        
        long cup = n;
        while(cup != 0){
            l.add((int) (cup%10));
            cup = cup/10;
        }
        
        return l;
    }
    
    public static void main(String[] args) {
        System.out.println("输入一个数:");
        Scanner s = new Scanner(System.in);
        long n = 0;
        if(s.hasNext()) n = s.nextLong();
        
        List<Integer> l = explodeNumber(n);
        Integer[] a = (Integer[])l.toArray(new Integer[]{});
        for(int i=0; i<=a.length/2; i++) {
            if(!a[i].equals(a[a.length-i-1])){
                System.out.println("不是回文");
                return;
            }
        }
        System.out.println("是回文");
    }
}