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
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
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
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
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!