6.4 C
New York

Remark trouver le nième nombre inversé en Java


Le défi

Le nombre inversé est un nombre qui est le même lorsqu’il est inversé.

Par exemple, les 20 premiers nombres inversés sont :

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22, 33, 44, 55, 66, 77, 88, 99, 101

Tâche

  • Vous devez retourner le nième numéro inversé. (Supposons que les nombres inversés commencent à partir de 0, comme indiqué dans l’exemple.)

Remarques

La answer en Java

Choice 1:

import java.math.BigInteger;

public class Palindrome {

    non-public static int size = 0;

    public static BigInteger findReverseNumber(lengthy n) {
        if (n == 1) {
            return BigInteger.ZERO;
        }
        size = 0;
        String the rest = findLengthAndRemainder(n - 1);
        whereas (the rest.size() < (size + 1) / 2) {
            the rest = "0" + the rest;
        }
        StringBuilder end result = new StringBuilder();
        if (the rest.matches("d0*")) {
            end result.append(the rest.charAt(0));
            end result.append("9".repeat(the rest.size() - 1));
        } else {
            end result.append(Integer.parseInt(the rest.substring(0, 1)) + 1);
            String worth = String.valueOf(new BigInteger(the rest.substring(1)).subtract(BigInteger.ONE));
            whereas (worth.size() < the rest.size() - 1) {
                worth = "0" + worth;
            }
            end result.append(worth);
        }
        String firstHalf = end result.toString();
        String secondHalf = end result.reverse().substring(size % 2);
        return new BigInteger(firstHalf + secondHalf);
    }

    non-public static String findLengthAndRemainder(lengthy quantity) {
        lengthy subtract = 9;
        whereas (quantity > 0) {
            size++;
            quantity -= subtract;
            if (quantity <= 0) {
                break;
            }
            size++;
            quantity -= subtract;
            if (quantity > 0) {
                subtract *= 10;
            }
        }
        quantity += subtract;
        return String.valueOf(quantity);
    }

}

Cas de take a look at pour valider notre answer

import org.junit.jupiter.api.Check;

import java.math.BigInteger;

import static org.junit.jupiter.api.Assertions.assertEquals;

class PalindromeTest {

    @Check
    void testFixed() {
        assertEquals(new BigInteger("0"), Palindrome.findReverseNumber(1));
        assertEquals(new BigInteger("1"), Palindrome.findReverseNumber(2));
        assertEquals(new BigInteger("9"), Palindrome.findReverseNumber(10));
        assertEquals(new BigInteger("909"), Palindrome.findReverseNumber(100));
        assertEquals(new BigInteger("900000000000000000009"), Palindrome.findReverseNumber(100000000000L));
    }

}

Related Articles

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Latest Articles