196 Algorithmen der ungelösten Mathematik

1. Einführung in den 196-Algorithmus
Eine Zahl liest sich sowohl vorwärts als auch rückwärts gleich, daher nennen wir sie eine "palindromische Zahl". Wähle zufällig eine Zahl und addiere die erhaltene Zahl, nachdem du sie rückwärts geschrieben hast, bis du eine palindromische Zahl erhältst. Die ausgewählte Zahl ist beispielsweise 49, eine palindromische Zahl 484 kann in zwei Schritten erhalten werden:

49 + 94 = 143
143 + 341 = 484

Es sind drei Schritte erforderlich, um 59 in ein Palindrom zu verwandeln und das Palindrom 1111
59+95=154
154+451=605
605+506=1111 zu erhalten

Die „palindromische Straße“ von 89 ist sehr lang, und die erste palindromische Zahl, 8813200023188, wird erst im 24. Schritt erhalten.

Sie denken vielleicht, dass es nicht überraschend ist, dass Sie immer eine palindromische Zahl erhalten können, indem Sie ständig „ein positives und ein negatives addieren“. Das ist in der Tat so - bei fast allen Zahlen ergibt sich früher oder später eine palindromische Zahl, wenn man sie weiterhin regelkonform addiert. 196 ist jedoch eine bemerkenswerte Ausnahme. Mathematiker haben Computer verwendet, um mehr als 300 Millionen Ziffern zu berechnen, und keiner von ihnen hat jemals eine palindromische Zahl erzeugt. Ist es möglich, ab 196 palindromische Zahlen hinzuzufügen? 196 Was ist so besonders? Dies bleibt bis heute ein Rätsel.

Der Autor hat ein kleines Programm geschrieben, um die Anzahl der Nicht-196-Palindrome zu berechnen, siehe unten:

Zweiter Java-Code:

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;
    }
}

Drei Laufergebnisse
Bildbeschreibung hier einfügen

Acho que você gosta

Origin blog.csdn.net/helloworldchina/article/details/105759329
Recomendado
Clasificación