簡體   English   中英

如何拆分整數

[英]How To Split An Integer

我正在嘗試創建一個附加持久性程序,其中用戶輸入一個數字,程序輸出總迭代次數(或附加持久性)。

我想對其進行編碼,以便不使用字符串數據類型。
是否有任何內置函數或其他可以使用的函數,以便我可以將大量數字拆分為單獨的數字?

注意事項:

  1. 我在 VB.Net 的控制台應用程序中編碼
  2. 我在編碼方面相對較新

要獲取以 10 為基數的數字的最后一位數字,您可以使用模運算符,稱為Mod ,因此:

1234 Mod 10 = 4
32 Mod 10 = 2

等等。

當您有最后一位數字時,本質上可以使用整數除法將其截斷:

1234 \ 10 = 123
32 \ 10 = 3

所以現在可以重復這個過程來得到最后一位數字。 一旦原始數字減少到 0,算法就完成了。

由於您不需要任何特定順序的數字,因此我們不必擔心。

所以,給定:

Function GetDigits(n As Int64) As List(Of Int64)
    Dim digits As New List(Of Int64)
    While n > 0
        digits.Add(n Mod 10)
        n = n \ 10
    End While

    Return digits

End Function

你可以這樣做:

Console.WriteLine(String.Join(" ", GetDigits(12345678900)))

得到以下輸出:

0 0 9 8 7 6 5 4 3 2 1

我使用Int64 (又名Long )作為GetDigits的參數,以便您可以使用比Int32 (又名Integer )可以容納的位數更多的數字。

由此,您可以:

Function AdditivePersistence(n As Int64) As Integer
    Dim pers = 0
    While n > 9
        pers += 1
        n = GetDigits(n).Sum()
    End While

    Return pers

End Function

您可以使用帶有數學函數的 LINQ 來完成此操作。

Function getSum(number As Integer) As Integer
    Return CInt(Enumerable.Range(0, CInt(Math.Round(Math.Log10(number), 0)) + 1).
                Select(Function(i) Math.Truncate(number / (10 ^ i)) Mod 10).Sum())
End Function
  • Enumerable.Range:創建從 0 到 log10 的整數。 這是位數 - 1。
  • 選擇:將數字除以 (10 ^ 整數),去除小數,執行模 10 以得到個部分。
  • 總和:對這些數字求和

將它放在一個函數中的循環中,該函數計算我們調用該函數的次數,直到結果 < 9

Function persistence(number As Integer) As Integer
    Dim count = 0
    Console.WriteLine($"Original Number: {number}")
    Do
        number = getSum(number)
        Console.WriteLine($"Number: {number}")
        count += 1
    Loop While number > 9
    Console.WriteLine($"Persistence: {count}")
    Return count
End Function
persistence(2718)

原編號:2718
數量:18
數量:9
持久性:2

使用字符串更簡單。 雖然你說你不想使用字符串,但這里有一個解決方案。

Function getSum(number As Integer) As Integer
    Return number.ToString().Sum(Function(c) CInt(c.ToString()))
End Function
  • 將數字字符串中的單個字符轉換為數字並將它們相加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM