196 未解決数学のアルゴリズム

1. 196 アルゴリズム
の紹介 数字は順方向でも逆方向でも同じように読めるので、「回文数」と呼びます。無作為に数字を選び、回文数が得られるまで、逆に書いて得られた数を足し続けます。たとえば、選択された数が 49 の場合、回文数 484 は次の 2 つの手順で取得できます。

49 + 94 = 143
143 + 341 = 484

59 を回文に変換し、回文 1111 を得るには 3 つの手順が必要です。
59+95=154
154+451=605
605+506=1111

89 の「回文の道」は非常に長く、最初の回文数 8813200023188 は 24 ステップまで取得されません。

常に「正と負を1つ足す」ことで常に回文数が得られるのは不思議ではないと思うかもしれません。これは実際に当てはまります - ほとんどすべての数について、規則に従ってそれらを追加し続けると、遅かれ早かれ回文数が存在します。ただし、196 はかなり注目すべき例外です。数学者はコンピューターを使用して 3 億桁以上を計算してきましたが、回文数を生成したものはありません。196から始めて、回文数を追加することはできますか? 196 何がそんなに特別なの? これは今日まで謎のままです。

著者は、非 196 回文の数を計算する小さなプログラムを作成しました。以下を参照してください。

2 番目の 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;
    }
}

3つの実行結果
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/helloworldchina/article/details/105759329