import java.util.Scanner;class Judgement { // 判断十进制整数是回文数,成功返回true,失败返回false public boolean Judgement1(int n) { int k, a, m = 0, 位数 = 0; k = n; do { a = k % 10; m = m * 10 + a; k = k / 10; 位数 += 1; } while (k != 0); return (n == m); } }// 判断显示回文数的用户交互程序class 回文 { public static void main(String args[]) { // 创建判断回文数的对象实例 Judgement jt = new Judgement(); // 从终端输入一个整数 int value; // 将要输入的整数值 System.out.println("输入一个整数值,再回车:"); Scanner cin = new Scanner(System.in); value = cin.nextInt(); // 使用判断回文数的对象实例,判断回文,并输出 System.out.println("从0到输入的整数"); System.out.println(value); System.out.println("之间,整数都是回文数的为:"); for (int i = 0; i < value; i++) { if (jt.Judgement1(i)) System.out.println(i); } } }
欢迎你去我blog 我总结过了 以前有人发帖子问什么是回文数。
回文数:http://en.wikipedia.org/wiki/Palindromic_numberpublic class TestPalindromic { public static void main(String[] args) { System.out.println(isPalidromic(1234321)); } /** * 判断指定的整数是不是回文数。 * * @param l 整数 * * @return 如果是回文数则返回 true */ private static boolean isPalidromic(long l) { String str = String.valueOf(l); int pointer = 0; int pointer2 = str.length() - 1 - pointer;
import java.util.regex.Matcher; import java.util.regex.Pattern;public class Test { public static boolean checkPalindromic(int n) { String s = String.valueOf(n); int l = s.length(); char[] t = new char[l]; for(int i=0;i<s.length();i++) { t[--l]=s.charAt(i); } String b = String.valueOf(t);
再来个效率稍微高些的 public class Test { public static boolean checkPalindromic(int n) { //w:数字位数 int w=0,temp=n; while(temp!=0) { w++; temp/=10; } if(w%2==0){ int d = w/2; int tmp=0; while(d--!=0) { temp=n%(n/10*10); int p = d; while(p--!=0) { temp*=10; } tmp+=temp; n/=10; } return tmp==n; } else { int d = w/2; int tmp=0; while(d--!=0) { temp=n%(n/10*10); int p = d; while(p--!=0) { temp*=10; } tmp+=temp; n/=10; } return tmp==n/10; }
如果是奇数位,舍掉中间的数字,偶数位正好
import java.util.Scanner;class Judgement { // 判断十进制整数是回文数,成功返回true,失败返回false public boolean Judgement1(int n) {
int k, a, m = 0, 位数 = 0; k = n; do {
a = k % 10; m = m * 10 + a; k = k / 10;
位数 += 1; } while (k != 0); return (n == m);
}
}// 判断显示回文数的用户交互程序class 回文 {
public static void main(String args[]) {
// 创建判断回文数的对象实例 Judgement jt = new Judgement(); // 从终端输入一个整数 int value; // 将要输入的整数值 System.out.println("输入一个整数值,再回车:"); Scanner cin = new Scanner(System.in); value = cin.nextInt(); // 使用判断回文数的对象实例,判断回文,并输出
System.out.println("从0到输入的整数");
System.out.println(value);
System.out.println("之间,整数都是回文数的为:");
for (int i = 0; i < value; i++) {
if (jt.Judgement1(i))
System.out.println(i);
}
}
}
我总结过了
以前有人发帖子问什么是回文数。
System.out.println(isPalidromic(1234321));
} /**
* 判断指定的整数是不是回文数。
*
* @param l 整数
*
* @return 如果是回文数则返回 true
*/
private static boolean isPalidromic(long l) {
String str = String.valueOf(l); int pointer = 0;
int pointer2 = str.length() - 1 - pointer;
while (pointer < pointer2) {
if (str.charAt(pointer) != str.charAt(pointer2)) {
return false;
} pointer++;
pointer2 = str.length() - 1 - pointer;
} return true;
}
}
import java.util.regex.Pattern;public class Test { public static boolean checkPalindromic(int n)
{
String s = String.valueOf(n);
int l = s.length();
char[] t = new char[l];
for(int i=0;i<s.length();i++)
{
t[--l]=s.charAt(i);
}
String b = String.valueOf(t);
return s.equals(b);
}
public static void main(String[] s)
{
for(int i=1;i<1000;i++)
{
if(Test.checkPalindromic(i))
System.out.println(i);
}
}
}
public class Test {
public static boolean checkPalindromic(int n)
{
//w:数字位数
int w=0,temp=n;
while(temp!=0)
{
w++;
temp/=10;
}
if(w%2==0){
int d = w/2;
int tmp=0;
while(d--!=0)
{
temp=n%(n/10*10);
int p = d;
while(p--!=0)
{
temp*=10;
}
tmp+=temp;
n/=10;
}
return tmp==n;
}
else
{
int d = w/2;
int tmp=0;
while(d--!=0)
{
temp=n%(n/10*10);
int p = d;
while(p--!=0)
{
temp*=10;
}
tmp+=temp;
n/=10;
}
return tmp==n/10;
}
} public static void main(String[] s)
{
for(int i=1;i<1000;i++)
{
if(Test.checkPalindromic(i))
System.out.println(i);
}
}
}
public static void main(String args[]) {
for(int i=1;i<1000;i++)
{
if(checkPalindromic(i))
System.out.println(i);
} } static boolean checkPalindromic(int n){
int k=n<0?-n:n;
if(n<10)
return false;
return Integer.parseInt(new StringBuffer(""+k).reverse().toString())==k;
}
{
//w:数字位数 ,这个循环用来求得数的位数
int w=0,temp=n;
while(temp!=0)
{
w++;
temp/=10;
}
//d:求得位数的一半长
int d = w/2;
int tmp=0;
//求出一个数后一半的倒序,并且经过此循环n存放的是截去后一半的结果
//例:奇数位:12321 求出的tmp=12, n=123
// 偶数位:598895 求出的tmp=598, n=598
while(d--!=0)
{
temp=n%(n/10*10);
int p = d;
while(p--!=0)
{
temp*=10;
}
tmp+=temp;
n/=10;
}
//判断位数w的奇偶
if(w%2==0){
return tmp==n;
}
else
{
return tmp==n/10;
}
}
{
//w:数字位数 ,这个循环用来求得数的位数
int w=0,temp=n;
while(temp!=0)
{
w++;
temp/=10;
}
//d:求得位数的一半长
int d = w/2;
int tmp=0;
//求出一个数后一半的倒序,并且经过此循环n存放的是截去后一半的结果
//例:奇数位:12321 求出的tmp=12, n=123
// 偶数位:598895 求出的tmp=598, n=598
while(d--!=0){
temp = n%10;
tmp = tmp*10+temp;
n/=10;
}
//判断位数w的奇偶
if(w%2==0){
return tmp==n;
}
else
{
return tmp==n/10;
}
}
boolean flag = true ;
int i = 0;
int textLen = 0 ;
if (null != text){
textLen = text.length ;
}else{
return false ;
}
int middle = (textLen-1)/2 ;
for(i = 0; i <= middle ; i++){
if(text[i] != text[textLen-i-1]){
flag = false ;
break ;
}
}
return flag ;
}
public boolean isPalindrome(char[] text){
boolean flag = true ;
int i = 0;
int textLen = 0 ;
if (null != text){
textLen = text.length ;
}else{
return false ;
}
int middle = (textLen-1)/2 ;
for(i = 0; i <= middle ; i++){
if(text[i] != text[textLen-i-1]){
flag = false ;
break ;
}
}
return flag ;
}为什么说是高效的呢,请听我详解: 一、循环的次数是由middle决定的,而不是(text.lengh-1/2),这样不用每次循环都会重新计算,因为每一次循环都是要重新计算条件约束,重新判断的。如果用i<=textLen-i-1做为判断条件则速度可能会不只慢一倍。二、一个入口一个出口,符合软件工程结构化程序设计思想。三、在text==null的情况下不会继续判断,可以防止空指针错误。四、初始是设flag=true,而不是false,减少了很多复杂的判断,不信大家可以把初始条件flag=false试试,一定繁锁的多。
public class Test2 { public static void main(String[] args) {
int i = 12321;
String s = String.valueOf(i);
System.out.println(checkPalindrome(s));
}
public static boolean checkPalindrome(String s){
if(s.length() <= 1){
return true;
}else if(!(Character.toString(s.charAt(0))).equals(Character.toString(s.charAt(s.length() - 1)))){
return false;
}else{
return checkPalindrome(s.substring(1, s.length() - 1));
}
}
}
初学者一般只想到循环,好一点的想到用递归,难得想到用StringBuffer.reverse()啊
package majian;
import java.applet.*;
import java.awt.*;
public class huiwen extends Applet{
Label lab;
TextField input;
long num;int i,j,m=0;long number[];
public void init(){
lab=new Label("请输入一个数字");
input=new TextField(10);
add(lab);add(input);
}
public boolean action(Event e,Object o){
if(e.target==input){
num=Integer.parseInt(input.getText());
if(num>=10e13)
j=14;
else if(10e13>num&&num>=10e12)
j=13;
else if(num>=10e11&&num<10e12)
j=12;
else if(num>=10e10&&num<10e11)
j=11;
else if(num>=10e9&&num<10e10)
j=10;
else if(num>=100000000&&num<1000000000)
j=9;
else if(num>=10000000&&num<100000000)
j=8;
else if(num>=1000000&&num<10000000)
j=7;
else if(num>=100000&&num<1000000)
j=6;
else if(num>=10000&&num<100000)
j=5;
else if(num>=1000&&num<10000)
j=4;
else if(num>=100&&num<1000)
j=3;
else if(num>=10&&num<100)
j=2;
else if(num>=1&&num<10)
j=1;
number=new long[(int)j];
for(i=0;i<j;++i){
number[i]=num%10;
num=num/10;
}
for(i=0;i<=j/2;++i){
if(number[i]==number[j-1-i])
++m;
}
if(m>j/2)
showStatus("该数是回文数字!");
else showStatus("该数不是回文数字!");
}
return true;
}
}