str = input.nextLine().trim(); //從鍵盤(pán)或者其他什么地方輸入的,取得字符串,并且去掉前后空格 c = str.toCharArray(); //把字符串轉(zhuǎn)化成字符數(shù)組 for(int i = c.length -1; i = 0 ; i--){ //從尾到頭遍歷數(shù)組 tmp +=c[i]; //將字符組成字符串 }
站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到廬山網(wǎng)站設(shè)計(jì)與廬山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋廬山地區(qū)。
采納哦
public?static?boolean?isPalindrome(int?x)?{
if?(x0)?{?return?false;?}
int?len=1;
for?(len=1;?(x/len)?=?10;?len*=10?);
while?(x?!=?0?)?{
int?left?=?x?/?len;
int?right?=?x?%?10;
if(left!=right){
return?false;
}
x?=?(x%len)?/?10;
len?/=?100;
}
return?true;
}
按照你的要求編寫(xiě)的,輸出從0到max中用二進(jìn)制表示和十進(jìn)制表示都是回文數(shù)的Java程序如下:
import?java.util.Scanner;
public?class?CCF?{
public?static?void?main(String[]?args)?{
Scanner?sc=new?Scanner(System.in);
System.out.print("請(qǐng)輸入一個(gè)整數(shù):");?
int?max=sc.nextInt();
for(int?i=0;i=max;i++){
String?num?=?String.valueOf(i);?
String?num2=Integer.toBinaryString(i);
String?reversenum=new?StringBuffer(num).reverse().toString();
String?reversenum2=new?StringBuffer(num2).reverse().toString();
if(reversenum.equals(num)??reversenum2.equals(num2)){
System.out.println(i+"用二進(jìn)制表示"+num2+"和十進(jìn)制表示"+i+"都是回文數(shù)");?
}
}
}
}
運(yùn)行結(jié)果:
請(qǐng)輸入一個(gè)整數(shù):1000
0用二進(jìn)制表示0和十進(jìn)制表示0都是回文數(shù)
1用二進(jìn)制表示1和十進(jìn)制表示1都是回文數(shù)
3用二進(jìn)制表示11和十進(jìn)制表示3都是回文數(shù)
5用二進(jìn)制表示101和十進(jìn)制表示5都是回文數(shù)
7用二進(jìn)制表示111和十進(jìn)制表示7都是回文數(shù)
9用二進(jìn)制表示1001和十進(jìn)制表示9都是回文數(shù)
33用二進(jìn)制表示100001和十進(jìn)制表示33都是回文數(shù)
99用二進(jìn)制表示1100011和十進(jìn)制表示99都是回文數(shù)
313用二進(jìn)制表示100111001和十進(jìn)制表示313都是回文數(shù)
585用二進(jìn)制表示1001001001和十進(jìn)制表示585都是回文數(shù)
717用二進(jìn)制表示1011001101和十進(jìn)制表示717都是回文數(shù)
import?java.util.Scanner;
public?class?Main{
static?final?int?start?=?10001;
static?final?int?end?=?999999;
public?static?void?main(String[]?args)?{
Scanner?sc?=?new?Scanner(System.in);
int?t;
StringBuilder?sb;
int?sum;
boolean?su;
while?(sc.hasNextInt())?{
su?=?false;
t?=?sc.nextInt();
for?(int?i?=?start;?i?=?end;?i++)?{
sum?=?0;
sb?=?new?StringBuilder(String.valueOf(i));
if?(sb.toString().equals(sb.reverse().toString()))?{
for?(int?j?=?0;?j??sb.length();?++j)?{
sum?+=?sb.charAt(j)?-?'0';
}
if?(sum?==?t)?{
su?=?true;
System.out.println(i);
}
}
}
if?(!su)?{
System.out.println(-1);
}
}
sc.close();
}
}
如果不能AC,優(yōu)化一下: 對(duì)每個(gè)i,轉(zhuǎn)為(字符或整數(shù))數(shù)組,對(duì)數(shù)組從索引0到長(zhǎng)度的一半遍歷,判斷對(duì)稱(chēng)位置是否相同,且各位數(shù)字和是否符合要求.
1、可以把這個(gè)5個(gè)數(shù)分解存在一個(gè)數(shù)組里面
2、通過(guò)循環(huán)判斷是否相等,循序次數(shù)就是長(zhǎng)度整除2
在設(shè)置一個(gè)狀態(tài)標(biāo)記,為T(mén)RUE就是回?cái)?shù),為false就不是,在循環(huán)中,一旦不相等就把狀態(tài)標(biāo)記改為false,終止循環(huán),當(dāng)循環(huán)結(jié)束時(shí),狀態(tài)標(biāo)記還是為true就是回?cái)?shù)。
import java.util.Scanner;
/*
* ?第三章 java運(yùn)算符
* 課后作業(yè) 判斷回文數(shù)
* 5.2.1 ?由用戶(hù)輸入一個(gè)整數(shù),判斷是不是回文數(shù)(完全對(duì)稱(chēng)的數(shù)),如果是 打印 true, 否則打印false
* 提示:本題僅要求判斷一個(gè)五位數(shù)是不是回文數(shù)
* 通過(guò)除法運(yùn)算和求模運(yùn)算符,可以分別求出一個(gè)五位數(shù)的每位上的值,然后進(jìn)行比較。
* Palindrome 回文數(shù)
*/
public class zuoye0352 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("輸入要判斷是否為回文數(shù)的數(shù)值:");
int i=sc.nextInt();
String str=""+i;
if(str.length()%2==0){
System.out.println(i+"不是回文數(shù)!"+str.length()%2);
}
//判斷反轉(zhuǎn)后 值是否相等 從而
else if(i==fanzhuan(i)){
System.out.println(i+"是回文數(shù)~");
}
else
System.out.println(i+"不是回文數(shù)!");
}
private static int fanzhuan(int input) {
int output = 0;//
while(input0){
//output= output*10;
output=output*10+input%10;
input=input/10;
}
return output;
}
}
這個(gè)問(wèn)題,你可以逆向思考
現(xiàn)在出現(xiàn)的現(xiàn)象是無(wú)論輸入什么,最終都會(huì)是回文,那也就是說(shuō),當(dāng)執(zhí)行
if(str1.equals(str2)){
System.out.println("是回文");}
else{
System.out.println("不是回文");}
一定都是執(zhí)行的第一個(gè)打印語(yǔ)句
也就是說(shuō)str1.equals(str2)一定返回true
也就是說(shuō)這equals兩個(gè)比較對(duì)象一定是相等,換句話說(shuō)這個(gè)兩個(gè)對(duì)象其實(shí)指的是一個(gè)對(duì)象,只是不同的引用名而已
也就是說(shuō)str1和str2都是指的一個(gè)StringBuffer對(duì)象
也就是說(shuō)reverse()方法是直接返回了本對(duì)象
查看源碼證實(shí):
/**
*?@since???JDK1.0.2
*/
@Override
public?synchronized?StringBuffer?reverse()?{
toStringCache?=?null;
super.reverse();
return?this;
}
可以看到最終返回this,也就是返回的是本對(duì)象,也就證實(shí)了剛的想法
所以綜上所訴,現(xiàn)在再來(lái)看一下整個(gè)代碼的執(zhí)行過(guò)程
創(chuàng)建了一個(gè)StringBuffer對(duì)象str1,里面包裝的字符串是"上海自來(lái)水
"
打印對(duì)象str1,所以此時(shí)打印的是:上海自來(lái)水
給對(duì)象str1調(diào)用reverse()方法,此時(shí)并沒(méi)有新創(chuàng)建一個(gè)StringBuffer,而是直接修改了str1里面的包裝字符串,改為"水來(lái)自海上",并返回了str1對(duì)象給str2
所以str1和str2其實(shí)都指的是一個(gè)StringBuffer(里面包含的都是"水來(lái)自海上")
此時(shí)打印str2,當(dāng)然顯示的是"水來(lái)自海上",其實(shí)若這是你再打印哈str1就明白了,因?yàn)檫@個(gè)是str1也打印出來(lái)的是"水來(lái)自海上"
個(gè)人建議寫(xiě)法
因?yàn)槟阒皇切枰鲆粋€(gè)回文的功能,因此可以只是把StringBuffer的reverse方法作為一個(gè)工具即可,所以建議如下寫(xiě)法
String?str1?=?"上海自來(lái)水";
System.out.println("原來(lái)的話為:"+str1);
String?str2=new?StringBuffer(str1).reverse().toString();
System.out.println("正話反說(shuō)為:"+str2);
if(str1.equals(str2)){
System.out.println("是回文");}
else{
System.out.println("不是回文");}