回文数字

回文数字

什么是回文数字?
原数等于将它的组成数字倒叙所得到数字的数。(好像有点ran)
简单地说就是正着看和反着看都一样的数字

现在我们通过一个题来讲解一下关于回文数的判别

回文数字_第1张图片

特殊解题方法

/*特殊解题方法
数据:用户输入的三位整数number、三位数的个位和百位上的数字a、b
操作;判断回文、输出
步骤:1、提示用户输入一个三位整数
2、将个位和百位的数字拿出来
3、判断个位和百位数字是否相等、并输出
*/
import java.util.Scanner;
class ProblemFour_01{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1、提示用户输入一个三位整数
        System.out.print("Enter a three-digit integer: ");
        int number=scanner.nextInt();
        //2、将个位和百位的数字拿出来
        int a=number%10;
        int b=number/100;
        //3、判断个位和百位数字是否相等、并输出
        if(a==b){
            System.out.println(number+" is a palindrome");
        }else
            System.out.println(number+" is not a palindrome");
    }
}

运行结果

Enter a three-digit integer: 123
123 is not a palindrome
Enter a three-digit integer: 121
121 is a palindrome

通用解题方法

这里我们需要用到原数字的反序数

反序数的计算

思路:将每个数字从个位到最高位依次提取出来,然后组合
我们需要一个变量sum来存反序数
int a=123456
先提取个位 sum= a%10 然后去除个位 a= a/10
然后提取十位sum=sum10+a%10 然后去除十位 a=a/10
然后提取百位sum=sum
10+a%10 然后去除百位 a=a/10

我们可以发现除了第一个式子与其他式子的区别是sum=sum10+a%10
所以我们可以给sum=0;那么就可以写成
int a=123456
先提取个位 sum=sum+ a%10 然后去除个位 a= a/10
然后提取十位sum=sum
10+a%10 然后去除十位 a=a/10
然后提取百位sum=sum*10+a%10 然后去除百位 a=a/10

当a=0时我们就将整个数取完了。

不使用循环

/*通用方法
思路:得到输入数的反序数字,通过比较反序数字和原数字,如果原数字和反序数字相等那么原数字就是回文数字
*/ 
import java.util.Scanner;
public class ProblemFour_02{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("Enter a three-digit integer: ");
		int num = scanner.nextInt();
        int temp = num;
        int sum = 0;
        sum = sum * 10 + num % 10;
        num /= 10;
        sum = sum * 10 + num % 10;
        num /= 10;
        sum = sum * 10 + num % 10;
        num /= 10;
        if(sum==temp){
            System.out.println(temp+" is a palindrome");
        }else{
            System.out.println(temp+" is not a palindrome");
        }  
	}
}

运行结果

Enter a three-digit integer: 123
123 is not a palindrome
Enter a three-digit integer: 121
121 is a palindrome

使用循环

for循环
/*通用方法
使用for循环
思路:得到输入数的反序数字,通过比较反序数字和原数字,如果原数字和反序数字相等那么原数字就是回文数字
*/ 
import java.util.Scanner;
public class ProblemFour_03{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("Enter a three-digit integer: ");
		int num = scanner.nextInt();
        int temp = num;
        int sum = 0;
        for(int i=0;i<3;i++){
            sum = sum * 10 + num % 10;
            num /= 10;
        }
        if(sum==temp){
            System.out.println(temp+" is a palindrome");
        }else{
            System.out.println(temp+" is not a palindrome");
        }  
	}
}

运行结果

Enter a three-digit integer: 123
123 is not a palindrome
Enter a three-digit integer: 121
121 is a palindrome
while循环
/*通用方法
使用while循环
思路:得到输入数的反序数字,通过比较反序数字和原数字,如果原数字和反序数字相等那么原数字就是回文数字
*/ 
import java.util.Scanner;
public class ProblemFour_04{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("Enter a three-digit integer: ");
		int num = scanner.nextInt();
        int temp = num;
        int sum = 0;
        while(num!=0){
            sum = sum * 10 + num % 10;
            num /= 10;
        }
        if(sum==temp){
            System.out.println(temp+" is a palindrome");
        }else{
            System.out.println(temp+" is not a palindrome");
        }  
	}
}

运行结果

Enter a three-digit integer: 123
123 is not a palindrome
Enter a three-digit integer: 121
121 is a palindrome

提升

对于任意一个正整数,回文判断

由于是任意正整数所以只能使用循环

for循环

/*扩展:当不知道用户输入的是几位数时
我们就必须使用循环来解决这个问题
for循环
for环需要知道循环的次数,所以我们需要计算用户输入的是几位数;
我们使用while循环来计算
*/
import java.util.Scanner;
class ProblemFour_05{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //提示用户输入一个正整数(任意的正整数)
        System.out.print("请输入一个正整数:");
        int number=scanner.nextInt();
        int temp1=number;
        int temp2=number;
        int a=0;//存正整数的位数
        int sum=0;//存用户输入的数的倒序数
        //计算正整数有几位
        while(temp1!=0){
            a=a+1;
            temp1=temp1/10;
        }
        for(int i=0;i<a;i++){
            sum = sum * 10 + number % 10;
            number /= 10;
        }
        if(sum==temp2){
            System.out.println(temp2+" 是一个回文数");
        }else
            System.out.println(temp2+" 不是回文数");
    }
}

运行结果

请输入一个正整数:123456
123456 不是回文数
请输入一个正整数:123454321
123454321 是一个回文数

while循环

/*扩展:当不知道用户输入的是几位数时
我们就必须使用循环来解决这个问题
while循环
*/
import java.util.Scanner;
class ProblemFour_06{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //提示用户输入一个正整数(任意的正整数)
        System.out.print("请输入一个正整数:");
        int number=scanner.nextInt();
        int temp1=number;
        int sum=0;//存用户输入的数的倒序
        while(number!=0){
            sum = sum * 10 + number % 10;
            number /= 10;
        }   
        if(sum==temp1){
            System.out.println(temp1+" 是一个回文数");
        }else
            System.out.println(temp1+" 不是回文数");
    }
}

运行结果

请输入一个正整数:123456
123456 不是回文数
请输入一个正整数:123454321
123454321 是一个回文数

你可能感兴趣的:(java,算法,java)