c急剧查找int中的特定数字

时间:2018-03-14 12:14:43

标签: c#

我试图找到整数(从右到左)的第n位 。我是编程新手,但我一直在使用这个网站作为参考 - 直到现在我还是拒绝传递我的问题,但即使经过几个小时的努力,我也至少无法理解这一点。

这是我到目前为止的代码,但对于 FindDigit(int 5673,int 4),它提供 53 而不是5, FindDigit(int 5673, int 3)给出 51 而不是6

using System;
public class digitFinder
{
  public static int FindDigit(int num, int nth)
  {
  num = Math.Abs(num);
  string ans = Convert.ToString(num);
  int i = ans.Length;
  return ans[i-nth];
  }
}

我根本无法理解为什么它返回一个2位数字。任何指导都赞赏!

3 个答案:

答案 0 :(得分:3)

53是字符 5的ASCII码。只需减去字符0,即数字48。

然而,通常通常是一个好主意,以避免对这样的事情进行字符串操作; 如果可能的话你应该更喜欢除法/余数(模数)算术。

答案 1 :(得分:3)

我只是用

int result = (num / (int)Math.Pow(10,nth-1)) % 10;

其中num是从(从右到左计算)第n个数字的数字,而nth是您想要的数字的“索引”(再次:从右到左计算)。请注意,它是基于1的。那是“1”是最右边的数字。 “0”将超出范围。

解释数学:

(int)Math.Pow(10,nth-1)获取你想要的索引并将其减少1,然后将其作为10的幂。因此,如果你想要第3个数字,那么得到10的2的幂等于100。 顺便说一句:转换为int是必要的,因为Math.Pow在double上工作并返回double。但我们希望继续使用整数运算。

除以上述等式的结果将您的数字“移动”到右侧,因此您想要的数字成为最右边的数字。例如:1234,我们想要右边的第三个数字(“2”)=> 1234 /(10 ^(3-1))= 1234/100 = 12

然后通过将“余数”(模数)运算符应用于除数10来“切除”最右边的数字。示例:12%10 = [12/10 = 1,剩余=] 2.

请注意,我也会检查nth是否为> 0和num> = 10 ^(nth-1)。 (绝不相信用户输入)

答案 2 :(得分:2)

仅仅因为没有其他人这样做,也因为我有可打印字符OCD

public static int GetLeastSignificantDigit(int number, int digit)
{
    for (var i = 0; i < digit - 1; i++)
        number /= 10;
    return number % 10;
}

Demo here