Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mencetak nombor yang berbeza daripada nombor sebelumnya?

Bagaimana untuk mencetak nombor yang berbeza daripada nombor sebelumnya?

WBOY
WBOYke hadapan
2024-02-06 09:51:09969semak imbas

Bagaimana untuk mencetak nombor yang berbeza daripada nombor sebelumnya?

Kandungan soalan

Sebagai contoh, jika saya mempunyai nombor 35565, outputnya ialah 3565.

Jadi, coretan kod saya mendapat satu digit tetapi saya tidak tahu cara mengekalkan nombor sebelumnya untuk menyemak dengan nombor seterusnya.

for {
num = num / 10
fmt.Print(num)
        
if num/10 == 0 {
    break
}
}

Jawapan betul


Kaedah ini memecahkan nombor kepada nombor dari kanan ke kiri, menyimpannya sebagai kepingan integer, dan kemudian melelang nombor dari kiri ke kanan untuk membina nombor dengan digit "unik berturut-turut".

Saya pada mulanya cuba memfaktorkan nombor dari kiri ke kanan, tetapi tidak tahu cara mengendalikan sifar pemegang tempat itu dari kanan ke kiri, saya tahu cara menangkap sifar tersebut;

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

Ini adalah pergi taman permainan untuk ujian.

Boleh disesuaikan untuk mengendalikan nombor negatif dengan membalikkan tanda negatif pada permulaan dan memulihkannya pada akhir.

Atas ialah kandungan terperinci Bagaimana untuk mencetak nombor yang berbeza daripada nombor sebelumnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam