Apakah cara yang paling berkesan untuk menjumlahkan digit sesuatu nombor?

Susan Sarandon
Lepaskan: 2024-11-24 01:14:14
asal
197 orang telah melayarinya

What are the most efficient ways to sum the digits of a number?

Menjumlahkan Digit Nombor: Meneroka Pendekatan Cekap

Apabila bertujuan untuk memastikan jumlah digit dalam input berangka, pelbagai metodologi boleh diambil bekerja. Walaupun naluri awal mungkin membawa kepada penggunaan pendekatan berasaskan rentetan, menukar nombor kepada rentetan dan kemudian menggunakan operasi matematik pada setiap digit individu, kaedah ini boleh menjadi sub-optimum.

Teknik yang lebih cekap terletak pada memanipulasi nombor sebagai integer. Ini boleh dicapai melalui gelung sementara yang berulang melalui digit nombor, berulang kali mengekstrak digit terakhir (menggunakan operator modulo) dan menambahkannya kepada jumlah berjalan sambil mengecualikan digit itu (melalui pembahagian integer). Kaedah ini, yang dikenali sebagai pendekatan modulo-and-divide, ditunjukkan dalam coretan kod berikut:

def sum_digits(n):
    s = 0
    while n:
        s += n % 10
        n //= 10
    return s
Salin selepas log masuk

Untuk pengoptimuman selanjutnya, seseorang boleh menggunakan fungsi divmod(), yang secara serentak melaksanakan modulo dan integer operasi bahagian:

def sum_digits2(n):
    s = 0
    while n:
        n, remainder = divmod(n, 10)
        s += remainder
    return s
Salin selepas log masuk

Selain itu, satu penyata tugasan boleh digunakan untuk menambah baik kelajuan pelaksanaan dengan menggabungkan operasi penjumlahan dan pembahagian:

def sum_digits3(n):
   r = 0
   while n:
       r, n = r + n % 10, n // 10
   return r
Salin selepas log masuk

Menanda aras pendekatan ini mendedahkan bahawa kaedah modulo-dan-bahagi mengatasi teknik manipulasi rentetan, manakala versi tugasan tunggal muncul sebagai pilihan terpantas:

%timeit sum_digits(n)
1000000 loops, best of 3: 574 ns per loop

%timeit sum_digits2(n)
1000000 loops, best of 3: 716 ns per loop

%timeit sum_digits3(n)
1000000 loops, best of 3: 479 ns per loop

%timeit sum(map(int, str(n)))
100000 loops, best of 3: 1.42 us per loop

%timeit sum([int(digit) for digit in str(n)])
100000 loops, best of 3: 1.52 us per loop

%timeit sum(int(digit) for digit in str(n))
100000 loops, best of 3: 2.04 us per loop
Salin selepas log masuk

Oleh itu, apabila ingin menjumlahkan digit sesuatu nombor dengan cekap, ia dinasihatkan untuk memilih teknik modulo-and-divide atau malah varian tugasan tunggal untuk prestasi maksimum.

Atas ialah kandungan terperinci Apakah cara yang paling berkesan untuk menjumlahkan digit sesuatu nombor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan