从网上找到一份编程练习题,我决定将里面的题目全都做一遍。 |
/*
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
*/
/*
分析:和水仙花数一样,可以分解这个5位数。使用数组存放分解的数字
在该程序中,我使用了循环分解数字。
判断回文数的方法:将数组a[]的数字,逆序保存到数组b[]中。
再将数组a[]和数组b[]中的内容转化为字符串,比较两个字符串是否相等,如果相等则为回文数,如果不想等则不是回文数。
后记:程序写完了之后,发现这样的思路太复杂了。其实很简单,直接比较数组中内容即可。
*/
import java.util.Scanner;
class HuiWenShu {
public static void main(String[] args) {
System.out.println("请输入一个五位数,本程序将判断是否为回文数。");
Scanner sc=new Scanner(System.in);
int x=0;
//检查输入数据的合法性,这里利用了continue和break的特点,实现循环检查。
while(true){
x=sc.nextInt();
if (x<9999 || x>100000){
System.out.println("您输入的不是五位数!请重新输入一个五位数。");
continue;
}
break;
}
int[] a=new int[5];
//拆分五位数,这里是个技巧,然而并不值得推荐
for (int i=4; i>=0; i--){
a=(int)(x/(Math.pow(10,i)));
x=(int)(x%(Math.pow(10,i)));
}
//输出判断是否为回文数
if(is_HuiWenShu(a)){
System.out.println("该数字是回文数");
}else{
System.out.println("该数字不是回文数");
}
}
/*
思路:将a[]中的内容,逆序存储到b[]中,如果两个数组内容还相等,那么就肯定是回文数
*/
public static boolean is_HuiWenShu(int[] a){
int[] b=new int[a.length]; //定义数组,用于
for (int i=0; i<a.length; i++){
b[b.length-1-i]=a;
}
String s1=arrayToString(a);
String s2=arrayToString(b);
if (s1!=null && s1.equals(s2)){
return true;
}else{
return false;
}
}
/*
将int数组中内容转化为字符串
*/
public static String arrayToString(int[] arr){
StringBuffer sb=new StringBuffer();
for (int i=0; i<arr.length; i++){
sb.append(arr);
}
return sb.toString();
}
}
|
|