Maison > développement back-end > Golang > Comment imprimer un numéro différent du numéro précédent ?

Comment imprimer un numéro différent du numéro précédent ?

WBOY
Libérer: 2024-02-06 09:51:09
avant
996 Les gens l'ont consulté

Comment imprimer un numéro différent du numéro précédent ?

Contenu de la question

Par exemple, si j'ai le numéro 35565, la sortie est 3565.

Donc, mon extrait de code contient des chiffres uniques, mais je ne sais pas comment conserver le numéro précédent pour vérifier avec le numéro suivant.

for {
num = num / 10
fmt.Print(num)
        
if num/10 == 0 {
    break
}
}
Copier après la connexion


Réponse correcte


Cette méthode divise le nombre en nombres de droite à gauche, les stocke sous forme de tranches entières, puis itère les nombres de gauche à droite pour construire un nombre avec des chiffres « consécutivement uniques ».

J'ai d'abord essayé de factoriser le nombre de gauche à droite, mais je ne savais pas comment gérer les zéros fictifs ; en le factorisant de droite à gauche, je savais comment capturer ces zéros.

// unique removes sequences of repeated digits from non-negative x,
// returning only "sequentially unique" digits:
// 12→12, 122→12, 1001→101, 35565→3565.
//
// Negative x yields -1.
func unique(x int) int {
    switch {
    case x < 0:
        return -1
    case x <= 10:
        return x
    }

    // -- Split x into its digits
    var (
        mag     int   // the magnitude of x
        nDigits int   // the number of digits in x
        digits  []int // the digits of x
    )

    mag = int(math.Floor(math.Log10(float64(x))))
    nDigits = mag + 1

    // work from right-to-left to preserve place-holding zeroes
    digits = make([]int, nDigits)
    for i := nDigits - 1; i >= 0; i-- {
        digits[i] = x % 10
        x /= 10
    }

    // -- Build new, "sequentially unique", x from left-to-right
    var prevDigit, newX int

    for _, digit := range digits {
        if digit != prevDigit {
            newX = newX*10 + digit
        }
        prevDigit = digit
    }

    return newX
}
Copier après la connexion

C'est un terrain de jeu pour tester.

Peut être adapté pour gérer les nombres négatifs en retournant le signe négatif au début et en le restaurant à la fin.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal