第六届真题
标题:生成回文数
所谓回文数就是左右对称的数字,比如:
585,5885,123321…
当然,单个的数字也可以算作是对称的。
小明发现了一种生成回文数的方法:
比如,取数字19,把它与自己的翻转数相加:
19 + 91 = 110,如果不是回文数,就再进行这个过程:
110 + 011 = 121 这次是回文数了。
200以内的数字中,绝大多数都可以在30步以内变成回文数,只有一个数字很特殊,就算迭代了1000次,它还是顽固地拒绝回文!
请你提交该顽固数字,不要填写任何多余的内容。
public class C_Main {
private static int sum;
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 100; i < 200; i++) {
sql(i);
if (sum > 200) {
System.out.println("大于" + sum + "的");
}
}
}
private static void sql(int i) {
// TODO Auto-generated method stub
if (!is(i)) {
sum++;
int num = i + dudu(i);
sql(num);
} else {
System.out.print("回文数"+i);
System.out.println(" "+sum);
sum = 0;
}
}
private static boolean is(int originalNumber) {
int palindrome = 0;
int origin = originalNumber;
// get the palindrome
while (originalNumber != 0) {
palindrome = palindrome * 10 + originalNumber % 10;
originalNumber /= 10;
}
return palindrome == origin;
}
private static int dudu(int i) {
int p = 0;
while (i != 0) {
p = p * 10 + i % 10;
i /= 10;
}
return p;
}
}
回文数101 1
回文数101 0
回文数303 1
回文数404 1
回文数505 1
回文数606 1
回文数707 1
回文数808 1
回文数909 1
回文数1111 2
回文数121 1
回文数111 0
回文数323 1
回文数424 1
回文数525 1
回文数626 1
回文数727 1
回文数828 1
回文数929 1
回文数1331 2
回文数141 1
回文数121 0
回文数343 1
回文数444 1
回文数545 1
回文数646 1
回文数747 1
回文数848 1
回文数949 1
回文数1551 2
回文数161 1
回文数131 0
回文数363 1
回文数464 1
回文数565 1
回文数666 1
回文数767 1
回文数868 1
回文数969 1
回文数1771 2
回文数181 1
回文数141 0
回文数383 1
回文数484 1
回文数585 1
回文数686 1
回文数787 1
回文数888 1
回文数989 1
回文数1991 2
回文数303 2
回文数151 0
回文数707 2
回文数909 2
回文数1111 2
回文数4444 3
回文数6666 3
回文数8888 3
回文数11011 3
回文数1221 2
回文数343 2
回文数161 0
回文数747 2
回文数949 2
回文数2662 3
回文数4884 3
回文数45254 5
回文数88555588 11
回文数13431 3
回文数1441 2
回文数383 2
回文数171 0
回文数787 2
回文数989 2
回文数5115 4
回文数9559 4
回文数44044 5
回文数1386116831 45
回文数15851 3
回文数1661 2
回文数747 3
回文数181 0
回文数45254 6
回文数13431 4
回文数2552 3
回文数4774 3
回文数6996 3
回文数889969988 163
回文数233332 7
回文数1881 2
回文数45254 7
回文数191 0
回文数6996 4
回文数233332 8
回文数2992 3
回文数9339 4
回文数-468848864 113
回文数881188 7
回文数79497 5
回文数3113 3