str = input.nextLine().trim(); //從鍵盤或者其他什么地方輸入的,取得字符串,并且去掉前后空格 c = str.toCharArray(); //把字符串轉(zhuǎn)化成字符數(shù)組 for(int i = c.length -1; i = 0 ; i--){ //從尾到頭遍歷數(shù)組 tmp +=c[i]; //將字符組成字符串 }
站在用戶的角度思考問題,與客戶深入溝通,找到廬山網(wǎng)站設(shè)計與廬山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站制作、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、國際域名空間、雅安服務(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;
}
按照你的要求編寫的,輸出從0到max中用二進制表示和十進制表示都是回文數(shù)的Java程序如下:
import?java.util.Scanner;
public?class?CCF?{
public?static?void?main(String[]?args)?{
Scanner?sc=new?Scanner(System.in);
System.out.print("請輸入一個整數(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+"用二進制表示"+num2+"和十進制表示"+i+"都是回文數(shù)");?
}
}
}
}
運行結(jié)果:
請輸入一個整數(shù):1000
0用二進制表示0和十進制表示0都是回文數(shù)
1用二進制表示1和十進制表示1都是回文數(shù)
3用二進制表示11和十進制表示3都是回文數(shù)
5用二進制表示101和十進制表示5都是回文數(shù)
7用二進制表示111和十進制表示7都是回文數(shù)
9用二進制表示1001和十進制表示9都是回文數(shù)
33用二進制表示100001和十進制表示33都是回文數(shù)
99用二進制表示1100011和十進制表示99都是回文數(shù)
313用二進制表示100111001和十進制表示313都是回文數(shù)
585用二進制表示1001001001和十進制表示585都是回文數(shù)
717用二進制表示1011001101和十進制表示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)化一下: 對每個i,轉(zhuǎn)為(字符或整數(shù))數(shù)組,對數(shù)組從索引0到長度的一半遍歷,判斷對稱位置是否相同,且各位數(shù)字和是否符合要求.
1、可以把這個5個數(shù)分解存在一個數(shù)組里面
2、通過循環(huán)判斷是否相等,循序次數(shù)就是長度整除2
在設(shè)置一個狀態(tài)標記,為TRUE就是回數(shù),為false就不是,在循環(huán)中,一旦不相等就把狀態(tài)標記改為false,終止循環(huán),當循環(huán)結(jié)束時,狀態(tài)標記還是為true就是回數(shù)。
import java.util.Scanner;
/*
* ?第三章 java運算符
* 課后作業(yè) 判斷回文數(shù)
* 5.2.1 ?由用戶輸入一個整數(shù),判斷是不是回文數(shù)(完全對稱的數(shù)),如果是 打印 true, 否則打印false
* 提示:本題僅要求判斷一個五位數(shù)是不是回文數(shù)
* 通過除法運算和求模運算符,可以分別求出一個五位數(shù)的每位上的值,然后進行比較。
* 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;
}
}
這個問題,你可以逆向思考
現(xiàn)在出現(xiàn)的現(xiàn)象是無論輸入什么,最終都會是回文,那也就是說,當執(zhí)行
if(str1.equals(str2)){
System.out.println("是回文");}
else{
System.out.println("不是回文");}
一定都是執(zhí)行的第一個打印語句
也就是說str1.equals(str2)一定返回true
也就是說這equals兩個比較對象一定是相等,換句話說這個兩個對象其實指的是一個對象,只是不同的引用名而已
也就是說str1和str2都是指的一個StringBuffer對象
也就是說reverse()方法是直接返回了本對象
查看源碼證實:
/**
*?@since???JDK1.0.2
*/
@Override
public?synchronized?StringBuffer?reverse()?{
toStringCache?=?null;
super.reverse();
return?this;
}
可以看到最終返回this,也就是返回的是本對象,也就證實了剛的想法
所以綜上所訴,現(xiàn)在再來看一下整個代碼的執(zhí)行過程
創(chuàng)建了一個StringBuffer對象str1,里面包裝的字符串是"上海自來水
"
打印對象str1,所以此時打印的是:上海自來水
給對象str1調(diào)用reverse()方法,此時并沒有新創(chuàng)建一個StringBuffer,而是直接修改了str1里面的包裝字符串,改為"水來自海上",并返回了str1對象給str2
所以str1和str2其實都指的是一個StringBuffer(里面包含的都是"水來自海上")
此時打印str2,當然顯示的是"水來自海上",其實若這是你再打印哈str1就明白了,因為這個是str1也打印出來的是"水來自海上"
個人建議寫法
因為你只是需要做一個回文的功能,因此可以只是把StringBuffer的reverse方法作為一個工具即可,所以建議如下寫法
String?str1?=?"上海自來水";
System.out.println("原來的話為:"+str1);
String?str2=new?StringBuffer(str1).reverse().toString();
System.out.println("正話反說為:"+str2);
if(str1.equals(str2)){
System.out.println("是回文");}
else{
System.out.println("不是回文");}
當前題目:小易愛回文java代碼 小易愛回文java代碼是多少
網(wǎng)站鏈接:http://www.muchs.cn/article42/hhidec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、Google、網(wǎng)站收錄、ChatGPT、用戶體驗、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)