196 Algoritmos de Matemática Não Resolvida

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
insira a descrição da imagem aqui

Guess you like

Origin blog.csdn.net/helloworldchina/article/details/105759329