检查第三位的整数是否为5

本文关键字:整数 是否 三位 检查 | 更新日期: 2023-09-27 17:54:28

我试图提出一个表达式,检查给定的整数,如果它的第三位数字从右到左是5。到目前为止,我所做的是:

string input = "5";
if (Regex.IsMatch(input[2].ToString(), "[5]"))
{
    System.Console.WriteLine("yes");
}
else
    System.Console.WriteLine("no");

有两个问题:

首先从左到右计数,而不是从右到左和第二,当数字小于3位时,返回超出范围异常。

检查第三位的整数是否为5

使用数字方式。如果数字大于99并且n是您的整数,则使用

(n / 100) % 10 == 5

n / 100删除最后两位数字(整数除法截断),% 10提取现在最右边的数字。检查是否为5。

将比使用正则表达式快得多。

Bathsheba的答案要好得多,但是如果您想使用正则表达式,我相信这个将满足您的需求:^'d+(?:[5]('d){2})$

参考@Bathsheba概念,

(n % 1000) / 100 == 5

可以做同样的事情。

(n % 1000)从右到左最多保持3位

/100取第三位

是的,RegEx不是我在这里要考虑的东西。既然已经有一个聪明的非转换答案,我就给出最简单的答案,转换为字符串;

  if (myInt.ToString().Length >= 3 && myInt.ToString()[2] == '5')
       //it's good
  else
      // it's bad

因为复合表达式在c#中是短路的,所以我可以在同一个if中使用这两个语句,而不用担心会得到IndexOutOfRangeException

既然问题是:

从从右到左的

if (myInt.ToString().Length >= 3 && myInt.ToString()[myInt.ToString().Length - 3] == '5')
   //it's good
else
   //it's bad

控制台。

            long n = long.Parse(Console.ReadLine());
            bool result = false;
            if ((n % 1000) / 100 == 5)
            {
                result = true;
            }
            Console.WriteLine(result);