How can you get the first digit in an int (C#)?

后端 未结 25 2700
遇见更好的自我
遇见更好的自我 2020-12-02 05:43

In C#, what\'s the best way to get the 1st digit in an int? The method I came up with is to turn the int into a string, find the 1st char of the string, then turn it back to

相关标签:
25条回答
  • 2020-12-02 05:46
    int start = curr;
    while (start >= 10)
      start /= 10;
    

    This is more efficient than a ToString() approach which internally must implement a similar loop and has to construct (and parse) a string object on the way ...

    0 讨论(0)
  • 2020-12-02 05:47

    variation on Anton's answer:

     // cut down the number of divisions (assuming i is positive & 32 bits)
    if (i >= 100000000) i /= 100000000;
    if (i >= 10000) i /= 10000;
    if (i >= 100) i /= 100;
    if (i >= 10) i /= 10;
    
    0 讨论(0)
  • 2020-12-02 05:47

    If you think Keltex's answer is ugly, try this one, it's REALLY ugly, and even faster. It does unrolled binary search to determine the length.

     ... leading code along the same lines
    /* i<10000 */
    if (i >= 100){
      if (i >= 1000){
        return i/1000;
      }
      else /* i<1000 */{
        return i/100;
      }
    }
    else /* i<100*/ {
      if (i >= 10){
        return i/10;
      }
      else /* i<10 */{
        return i;
      }
    }
    

    P.S. MartinStettner had the same idea.

    0 讨论(0)
  • 2020-12-02 05:47

    Very easy method to get the Last digit:

    int myInt = 1821;
    
    int lastDigit = myInt - ((myInt/10)*10); // 1821 - 1820 = 1
    
    0 讨论(0)
  • 2020-12-02 05:49
    int temp = i;
    while (temp >= 10)
    {
        temp /= 10;
    }
    

    Result in temp

    0 讨论(0)
  • 2020-12-02 05:51
    while (i > 10)
    {
       i = (Int32)Math.Floor((Decimal)i / 10);
    }
    // i is now the first int
    
    0 讨论(0)
提交回复
热议问题