Kaedah tatasusunan integer kepada numerik yang cekap dalam C#
Dalam pengaturcaraan, selalunya perlu untuk mengekstrak nombor individu daripada integer. Terdapat cara yang lebih mudah dan cekap untuk melakukan ini daripada menukar nombor kepada rentetan dan kemudian menghuraikannya aksara demi aksara kepada integer.
Sebagai contoh, katakan terdapat pembolehubah integer i
dengan nilai 987654321. Tugasnya adalah untuk mencipta tatasusunan integer is
yang mewakili setiap digit nombor, menghasilkan [9, 8, 7, 6, 5, 4, 3, 2, 1].
Penyelesaian rekursif berasaskan tindanan:
<code class="language-csharp">public Stack<int> NumbersIn(int value) { if (value == 0) return new Stack<int>(); var numbers = NumbersIn(value / 10); numbers.Push(value % 10); return numbers; }</code>
Penyelesaian ini menggunakan rekursi untuk memecahkan nombor kepada digit individu. Ia terus membahagikan nombor dengan 10 dan menolak baki (digit terakhir) ke dalam timbunan. Sebaik sahaja nombor itu mencapai 0, rekursi berhenti, meninggalkan timbunan yang mengandungi nombor asal.
Penyelesaian bukan rekursif menggunakan tindanan:
<code class="language-csharp">public int[] NumbersIn(int value) { var numbers = new Stack<int>(); for (; value > 0; value /= 10) numbers.Push(value % 10); return numbers.ToArray(); }</code>
Pendekatan ini mengelakkan pengulangan dan menggunakan timbunan untuk tujuan yang sama. Ia secara berulang membahagikan nombor dengan 10 dan menolak bakinya ke dalam timbunan sehingga nombor itu mencapai 0. Akhir sekali, kandungan timbunan ditukar kepada tatasusunan integer.
Penyelesaian bukan rekursif berasaskan tatasusunan:
<code class="language-csharp">private static int[] NumbersIn(int value) { // 0 的对数无法计算,所以直接返回。 if (value == 0) return new int[] { 0 }; value = Math.Abs(value); var digits = 1 + (int)Math.Log10(value); var buffer = new int[digits]; for (var counter = digits - 1; counter >= 0; counter--) { buffer[counter] = value % 10; value /= 10; } return buffer; }</code>
Penyelesaian ini beroperasi secara langsung pada tatasusunan untuk menyimpan digit nombor. Ia secara berulang mengira nombor, memperuntukkan tatasusunan, dan menyimpan setiap nombor di lokasi yang betul. Kaedah ini menyediakan cara langsung dan cekap untuk mengekstrak nombor individu daripada integer.
Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Integer kepada Tatasusunan Digitnya dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!