Как вы можете получить первую цифру в int (C #)? - PullRequest
74 голосов
/ 31 марта 2009

В C #, как лучше всего получить 1-ю цифру в int? Метод, который я придумал, состоит в том, чтобы превратить int в строку, найти 1-й символ строки, а затем превратить его обратно в int.

int start = Convert.ToInt32(curr.ToString().Substring(0, 1));

В то время как это делает работу, кажется, что есть, вероятно, хорошее, простое, математическое решение такой проблемы. Манипулирование струнами кажется неуклюжим.

Редактировать: независимо от разницы в скорости, mystring [0] вместо Substring () по-прежнему является просто манипулированием строкой

Ответы [ 25 ]

0 голосов
/ 31 марта 2009
while (i > 10)
{
   i = (Int32)Math.Floor((Decimal)i / 10);
}
// i is now the first int
0 голосов
/ 31 марта 2009
start = getFirstDigit(start);   
public int getFirstDigit(final int start){
    int number = Math.abs(start);
    while(number > 10){
        number /= 10;
    }
    return number;
}

или

public int getFirstDigit(final int start){
  return getFirstDigit(Math.abs(start), true);
}
private int getFirstDigit(final int start, final boolean recurse){
  if(start < 10){
    return start;
  }
  return getFirstDigit(start / 10, recurse);
}
0 голосов
/ 31 марта 2009
int start = curr;
while (start >= 10)
  start /= 10;

Это более эффективно, чем подход ToString (), который внутренне должен реализовывать подобный цикл и должен создавать (и анализировать) строковый объект на пути ...

0 голосов
/ 31 марта 2009

Вот более простой способ, который не включает циклы

int number = 1234
int firstDigit = Math.Floor(number/(Math.Pow(10, number.ToString().length - 1))

Это даст нам 1234 / Math.Pow (10, 4 - 1) = 1234/1000 = 1

0 голосов
/ 31 марта 2009

Не итерационная формула:

public static int GetHighestDigit(int num)
{
    if (num <= 0)
       return 0; 

    return (int)((double)num / Math.Pow(10f, Math.Floor(Math.Log10(num))));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...