按索引返回数字的方法

时间:2018-12-21 11:11:05

标签: c# digits

我想编写一种方法,它不按索引(num)返回数字(place的数字,而不仅使用数组循环和条件。

例如:

  1. 对于输入num = 17489place = 1,该方法返回9
  2. 但是如果像num = 17489这样的索引不存在,则place = 6返回-1

如果我设置了i = 0情况1)有效,但2)否,则代码中的某些问题不起作用 如果我设置了i = 1,则情况2)有效,但1)否 请帮忙弄清楚哪里出了问题

    public static int Digit_by_place(int num, int place)
    {
        int digit = 0, i = 0;

        // the lop run until the place in the 
        while (num > 0 && i <= place)number
        {
            digit = num % 10;
            num = num / 10;
            i++;

            // if there is no didgit in the input place return -1
            if (i < place && num == 0)
            {
                return -1;
            }

            // return the last digit from left (the bigest)
            if (num == 0 && digit > 0 && i == place)
            {
                return digit;
            }
        }

        return digit;
    }

3 个答案:

答案 0 :(得分:4)

我们可以利用<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class='parent'> <div>a</div> <div>b4</div> <div>52 5</div> <hr> <input type='text' value='323'> </div>最多可以有int个数字这一事实。

代码:

10

演示:

public static int Digit_by_place(int num, int place) {
  if (place <= 0 || place > 10)   // place must be in [1..10] range
    return -1;
  else if (num == 0)              // special case num == 0
    return place == 1 ? 0 : -1;

  for (int i = 1; i < place; ++i)  
    num /= 10;

  return num == 0 ? -1 : Math.Abs(num % 10);
}

结果:

using System.Linq;
...

Tuple<int, int>[] tests = new Tuple<int, int>[] {
  Tuple.Create( 17489,  1),
  Tuple.Create( 17489,  2),
  Tuple.Create( 17489,  3),
  Tuple.Create( 17489,  4),
  Tuple.Create( 17489,  5),
  Tuple.Create( 17489,  6),
  Tuple.Create(-17489,  1),
  Tuple.Create(-17489,  6),
  Tuple.Create( 17489,  0),
  Tuple.Create( 17489, -1),
  Tuple.Create(-17489, -1),
  Tuple.Create( 17489,  5),
  Tuple.Create(-17489,  5),
  Tuple.Create(     0,  1),
  Tuple.Create(     0,  4),
};

var report = string.Join(Environment.NewLine, tests
  .Select(test => 
     $"Digit_by_place({test.Item1,6}, {test.Item2,2}) = {Digit_by_place(test.Item1, test.Item2),2}"));

Console.Write(report);

答案 1 :(得分:1)

仅使用数学。

public int GetNumber(int number, int position)
{
    if(number == 0 && position == 1) 
       return 0;
    if(position <= 0 || position > (int)(Math.Log10(number = Math.Abs(number)) + 1)) 
       return -1;
    return (int)((number % (Math.Pow(10, position))) / (Math.Pow(10, position - 1)));
}

答案 2 :(得分:0)

for(int i=0; i<place; i++)
{
       num = num / 10;
       if (num <= 0)
           return -1;
}
return num % 10;

如果您从0开始计数,这应该可以工作