Java小问题

abc409992359 2010-03-07 01:57:55
怎样判断一个数是不是回文数?如12321,25652...
...全文
311 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
keeya0416 2010-03-08
  • 打赏
  • 举报
回复

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));
}
}
}
owen_008 2010-03-08
  • 打赏
  • 举报
回复
给楼主顶一个~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~哈哈
whut_lcy 2010-03-08
  • 打赏
  • 举报
回复
算法,发酸,算法,发酸。。。
q41730 2010-03-08
  • 打赏
  • 举报
回复
强人一大片啊。


人气很足。。哈
liumingwei2009 2010-03-08
  • 打赏
  • 举报
回复
引用楼主 abc409992359 的回复:
怎样判断一个数是不是回文数?如12321,25652...


这个算法貌似可以
dom72 2010-03-08
  • 打赏
  • 举报
回复
高手真多呀。。回复内容太短了!
majian1988817 2010-03-08
  • 打赏
  • 举报
回复
给你个程序就是来判断是不是回文数字的。
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;
}
}
fyjava1984 2010-03-08
  • 打赏
  • 举报
回复
都可以的
abc409992359 2010-03-08
  • 打赏
  • 举报
回复
说实话,这个俺会,就是我觉得我的方法比较笨拙,想了好长时间都没有想到一个简单的方法,所以就问一下高手了,不过还是谢了!
UPC_思念 2010-03-08
  • 打赏
  • 举报
回复
这个问题比较经典,楼上的大侠们写得程序应该可以解决
Rogice 2010-03-08
  • 打赏
  • 举报
回复
学习了,经验实在是太重要了
初学者一般只想到循环,好一点的想到用递归,难得想到用StringBuffer.reverse()啊
whlcy 2010-03-08
  • 打赏
  • 举报
回复
zx8813443 2010-03-07
  • 打赏
  • 举报
回复
引用 15 楼 bbb332 的回复:
高效回文判断方法
Java codepublicboolean isPalindrome(char[] text){boolean flag=true ;int i=0;int textLen=0 ;if (null!= text){
textLen= text.length ;
}else{returnfalse ;
}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试试,一定繁锁的多。

我的第一个的解法多做了,是你的两倍功,好,不错!
bbb332 2010-03-07
  • 打赏
  • 举报
回复
高效回文判断方法
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试试,一定繁锁的多。
bbb332 2010-03-07
  • 打赏
  • 举报
回复
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 ;
}
zx8813443 2010-03-07
  • 打赏
  • 举报
回复
引用 2 楼 knightzhuwei 的回复:
Java codeimport java.util.Scanner;class Judgement {// 判断十进制整数是回文数,成功返回true,失败返回falsepublicboolean Judgement1(int n) {int k, a, m=0, 位数=0;

k= n;do {
a= k%10;

m= m*10+ a;

k= k/10;
位数+=1?-

参照这位大牛,再次修改

public static boolean checkPalindromic2(int n)
{
//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;
}
}


zx8813443 2010-03-07
  • 打赏
  • 举报
回复
引用 6 楼 canghaiguzhou 的回复:
再来个效率稍微高些的
Java codepublicclass Test {publicstaticboolean 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;
}

}publicstaticvoid main(String[] s)
{for(int i=1;i<1000;i++)
{if(Test.checkPalindromic(i))
System.out.println(i);

}
}
}

再完善一下,加上注释

public static boolean checkPalindromic(int n)
{
//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;
}

}

soton_dolphin 2010-03-07
  • 打赏
  • 举报
回复
两个循环,比较第一个数字和最后一个数字是否一样
bawgiitx 2010-03-07
  • 打赏
  • 举报
回复

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;
}
zhuyouyong 2010-03-07
  • 打赏
  • 举报
回复
引用 5 楼 canghaiguzhou 的回复:
Java codeimport java.util.regex.Matcher;import java.util.regex.Pattern;publicclass Test {publicstaticboolean checkPalindromic(int n)
{
String s= String.valueOf(n);int l= s.length();char[] ?-
正解
加载更多回复(8)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧