Java习题6

说明:

虽然程序中只有一个主函数就可以解决所有问题,但仅有一个主函数的话代码存在的问题也比较多,尤其是功能越加复杂,那么主函数就会代码很多,造成内存占用过大,或者可读性降低,又或者维护成本太高,所以创建更多函数可以解决一定的问题.

1.(求一个整数各位数字之和)编写一个方法,计算一个整数各 位数字之和。使用下面的方法头:

public static int sumDigits(long n)

例如: sumDigits(234) 返回9(2+3+4)。

提示:使用求余操作符%提取数字,用除号/去掉提取出来的数字。例如:使用234%10 (=4)抽取4。然后使用234/10(=23)从234中去掉4。使用一个循环来反复提取和去掉每位数字,直到所有的位数都提取完为止。编写程序提示用户输人一个整数,然后显示这个整数所有数字的和。

import java.util.Scanner;
class Demo01{
    public static void main(String[] args){    
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");    //提示用户输入一个数字
        long num=scanner.nextLong();
        int sum=sumDigits(num);    //调用sumDigits函数
        System.out.println(sum);
    }
    public static int sumDigits(long n){
        int sum=0;
        while(true){
            sum+=n%10;  
            n/=10;
            if(n==0){
                return sum;    //将sum返给主函数
            }
        }
    }
}

2.(回文整数)使用下面的方法头编写两个方法:

// Return the reversal of an integer, i.e., reverse(456) returns 654
pub1ic static int reverse(int number)

// Return true if number is a palindrome
public static boolean isPalindrome(int number)
     

       使用reverse方法实现isPalindrome。如果一个数字的反向倒置数和它的顺向数一样,这个数就称作回文数。编写一个测试程序,提示用户输人一个整数值,然后报告这个整数是否是回文数。

  • 解题思路:根据题意有两个函数,一个是对数字进行逆向排序,一个是进行判断
import java.util.Scanner;
class Demo02{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入一个数字:");    //提示用户输入一个数字
        int num=scanner.nextInt();
        if(isPalindrome(num)){     //将该数字传给isPalindrome得出结果,得到结果后,判断该数字是否回文
            System.out.println("是回文");
        }else{
            System.out.println("不是回文");
        }
    }
    public static boolean isPalindrome(int num){
        return reverse(num)==num;     //再将该数字传给reverse进行反序排序,排序结果跟num的相等的布尔运算结果返还给主函数
    }
    public static int reverse(int num){
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;            //进行反向排序
            if(num==0){
                return sum;    //将排序结果返还给isPalindrome
            }
        }
    }
}

3.(数学:平方根的近似求法)有几种实现Math类中sqrt方法的技术。其中一个称为巴比伦法。它通过使用下面公式的反复计算近似地得到:
nextGuess = (1lastGuess + n / lastGuess) / 2
        当nextGuess和lastGuess几乎相同时,nextGuess 就是平方根的近似值。最初的猜测值可以是任意一个正值(例如1)。这个值就是lastGuess的初始值。如果nextGuess和lastGuess的差小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess就成为lastGuess,近似过程继续执行。实现下面的方法,返回n的平方根。
        pub1ic static double sqrt(long n)

class Demo03{
    public static void main(String[] args){
        System.out.println(sqrt(9));    //将sqrt(9)的运算结果输出
    }
    public static double sqrt(long n){
        double lastGuess=1;
        double nextGuess=(lastGuess+n/lastGuess)/2;
        while(true){
            if(Math.abs(nextGuess-lastGuess)<0.00001){
                return nextGuess;    //返回给主函数
            }
            lastGuess=nextGuess;
            nextGuess=(lastGuess+n/lastGuess)/2;
        }
    }
}

4.(回文素数)回文素数是指一个数同时为素数和回文数。例如: 131是一个素数,同时也是一个回文素数。数字313和757也是如此。编写程序,显示前100个回文素数。每行显示10个数并且准确对齐,数字中间用空格隔开。

  • 解题思路:我们可以先从小到大找一个素数,再判断他是否回文,一直重复,直到有100个回文素数
class Demo04_06{
    public static void main(String[] args){
        int count=0;    //表示回文素数的个数
        int num=2;      //表示可能的回文素数的数字 从2开始
        while(true){
            if(isHuiWenAndSuShu(num)){    //判断num是否回文素数
                count++;            //是则count+1
                System.out.print(num+" ");
                if(count%10==0){    
                    System.out.println();    //当输出了十个回文素数后换行
                }
            }
            if(count==100){
                break;            //到100个后停止
            }
            num++;            //num+1继续循环
        }
    }
    public static boolean isHuiWenAndSuShu(int num){  
        return isHuiWen(num)&&isSuShu(num);
    }
    public static boolean isHuiWen(int num){
        return reverse(num)==num;
    }
    public static int reverse(int num){    //返回num的回文
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;
            if(num==0){
                return sum;
            }
        }
    }
    public static boolean isSuShu(int num){    //判断num是不是素数
        for(int i=2;i<=num/2;i++){
            if(num%i==0){
                return false;
            }
        }
        return true;
    }
}

5.(反素数)反素数(反转拼写的素数)是指一个非回文素数,将其反转之后也是一个素数。例如:17是一个素数,而71也是一个素数,所以17和71是反素数。编写程序,显示前100个反素数。每行显示10个,并且数字间用空格隔开

  • 解题思路:先从小到大找到素数,然后表示出他的逆向顺序,两个不一样,且逆向顺序的也是素数则输出
class Demo05{
    public static void main(String[] args){
        int count=0;
        int num=2;
        while(true){
            if(isFanZhuanSuShu(num)){
                count++;
                System.out.print(num+" ");
                if(count%10==0){
                    System.out.println();
                }
            }
            if(count==100){
                return; 
            }
            num++;
        }
    }

    public static boolean isFanZhuanSuShu(int num){    //判断是否是素数且反转后不相等且也是素数
        return isSuShu(num)&&isSuShu(reverse(num))&&!isHuiWen(num);
    }

    public static boolean isHuiWen(int num){    //判断回文
        return reverse(num)==num;
    }

    public static boolean isSuShu(int num){    //判断素数
        for(int i=2;i<=num/2;i++){
            if(num%i==0){
                return false;
            }
        }
        return true;
    }

    public static int reverse(int num){    //反向排序
        int sum=0;
        while(true){
            sum=sum*10+num%10;
            num/=10;
            if(num==0){
                return sum;
            }
        }
    }
}

 

你可能感兴趣的:(Java习题)