1. Introdução ao Algoritmo 196
Um número lê o mesmo tanto para frente quanto para trás, por isso o chamamos de "número palíndromo". Escolha um número aleatoriamente e continue adicionando o número obtido depois de escrevê-lo ao contrário até obter um número palindrômico. Por exemplo, o número selecionado é 49, um número palindrômico 484 pode ser obtido em duas etapas:
49 + 94 = 143
143 + 341 = 484
São necessários três passos para transformar 59 em um palíndromo e obter o palíndromo 1111
59+95=154
154+451=605
605+506=1111
A "Estrada Palindrômica" de 89 é muito longa, e o primeiro número palindrômico, 8813200023188, não será obtido até a 24ª etapa.
Você pode pensar que não é surpreendente que você sempre possa obter um número palíndromo constantemente "adicionando um positivo e um negativo". Este é realmente o caso - para quase todos os números, se você continuar a adicioná-los de acordo com as regras, mais cedo ou mais tarde haverá um número palíndromo. 196, no entanto, é uma exceção bastante notável. Os matemáticos usaram computadores para calcular mais de 300 milhões de dígitos, e nenhum deles jamais produziu um número palíndromo. A partir de 196, é possível somar números palíndromos? 196 O que há de tão especial? Isso permanece um mistério até hoje.
O autor escreveu um pequeno programa para calcular o número de palíndromos não 196, veja abaixo:
Segundo código java:
import java.math.BigInteger;
import java.util.Scanner;
public class OneNineSixBigRepeat {
static boolean pr=false;//true 打印测试日志
public static void main(String[] args) {
boolean bool=true;
System.out.println("请依次输入任意数字,并回车确认: ");
Scanner inputW = new Scanner(System.in);
while (bool) {
int num= inputW.nextInt();
BigInteger bNum = BigInteger.valueOf(num);
String srtNum="";
String StrNewNum="";
int i=0;
System.out.println("*******************************");
do {
i++;
BigInteger bNumReverse = bIntReverse(bNum);
bNum = bNum.add(bNumReverse);
BigInteger bNewNum = bIntReverse(bNum);
srtNum = String.valueOf(bNum);
StrNewNum = String.valueOf(bNewNum);
} while (!(srtNum.equals(StrNewNum)));
System.out.println("第 "+i+" 步 回文数"+bNum+"出现!");
}
}
//数组转数字 BigInteger
static BigInteger arrayToInt(int[] arrayInt){
String strNum="";
for (int num : arrayInt) {
strNum=strNum+Integer.toString(num);
}
//生成数字
BigInteger bIntNum=new BigInteger(strNum);
return bIntNum;
}
//数字反转
static BigInteger bIntReverse(BigInteger bIntNum){
String sNum=String.valueOf(bIntNum);
int lNum=sNum.length();
//数字转数组
int[] arrayInt=new int[lNum];
for (int i=0;i<lNum;i++){
arrayInt[i]=Integer.parseInt(sNum.substring(i,i+1));
}
//反序数组
int[] newArrayInt=new int[lNum];
for (int i = arrayInt.length - 1; i >= 0; i--) {
newArrayInt[lNum-1-i]=arrayInt[i];
}
//生成反序数
BigInteger bNewNum=arrayToInt(newArrayInt);
return bNewNum;
}
}
Três resultados em execução