題目連結
題意:
測資每次輸入一個數字,將數字加上其反轉的值後,觀察結果是不是palindrome(從左而右或右到左是否相同,亦即原數是否等於其反轉的數),若否,重複前面動作直到求出palindrome,最後印出進行次數(相加)與最終結果
解法:
先寫出反轉的方法,遞迴進行,每次判斷反轉前後是否相等,若否則相加繼續判斷,題目有先決條件:
1.必定有解
2.遞迴次數小於1000(其實我一開始擔心TLE,因為反轉的寫法可能不精簡,但卻發生另一件事..)
3. 結果不超過4,294,967,295(超過int的上限,本來出現WA還想不出理由,最後改成long解決)
程式(Java):
題意:
測資每次輸入一個數字,將數字加上其反轉的值後,觀察結果是不是palindrome(從左而右或右到左是否相同,亦即原數是否等於其反轉的數),若否,重複前面動作直到求出palindrome,最後印出進行次數(相加)與最終結果
解法:
先寫出反轉的方法,遞迴進行,每次判斷反轉前後是否相等,若否則相加繼續判斷,題目有先決條件:
1.必定有解
2.遞迴次數小於1000(其實我一開始擔心TLE,因為反轉的寫法可能不精簡,但卻發生另一件事..)
3. 結果不超過4,294,967,295(超過int的上限,本來出現WA還想不出理由,最後改成long解決)
程式(Java):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.*; | |
public class Main { | |
public static long getReverse(long x) { | |
if (x < 10) | |
return x; | |
else { | |
long x1 = x, y = 0; | |
while (x1 > 0) { | |
y = (y * 10) + (x1 % 10); | |
x1 /= 10; | |
} | |
return y; | |
} | |
} | |
public static void main(String args[]) { | |
Scanner sc = new Scanner(System.in); | |
long N = sc.nextInt(); | |
for (int i = 0;i < N; i++) { | |
long P = sc.nextInt(); | |
long count = 1; | |
P = P + getReverse(P); | |
while (getReverse(P) != P) { | |
P = P + getReverse(P); | |
count++; | |
} | |
System.out.println(count + " " + P); | |
} | |
} | |
} |
留言
張貼留言