如何检查int中是否存在数字?

时间:2011-03-25 07:50:18

标签: c# int

我有一些int值,其名称为number。我有其他int值,其名称为x。我想知道x中是否存在number。目前我将数字转换为string()并使用string.Contain(x)方法。我认为这不是一个好方法,它会对拳击和表演造成伤害。

有更好的方法吗?

其他信息: number可以是一个或多个数字,例如12345. x始终为一位数。

3 个答案:

答案 0 :(得分:3)

这不是一个糟糕的方法。我能想到的唯一选择是使用重复分割和模数运算符,由于这些运算的数量可能会慢一些。

除非出现严重的性能问题,否则我会坚持使用您所拥有的功能。


根据您的其他信息:

  

number可以是一个或多个数字,例如12345. x始终是一位数。

我会选择以下(伪代码):

def numContains (number, digit):
    if number == 0 and digit == 0:
        return true
    while number != 0:
        if number % 10 == digit:
            return true
        number = number / 10
    return false

第一个if是必需的,因为如果您传入while number,则不会输入0,而您仍然必须抓住number digit0number

否则,您只需继续针对digit检查number的最低有效数字,并每次将number除以10。

如果在// Function: containsDigit, returns whether non-negative number holds a digit. // In: num, the integer to check. // dgt, the digit to look for. // Out: Boolean representing whether digit found in number. // Notes: Digit is coerced to a single digit. Boolean containsDigit(UInt32 num, UInt32 dgt) { dgt = dgt % 10; // silently force contract compliance. if ((num == 0) && (dgt == 0)) // Zero contains zero. return true; while (num != 0) { // While more digits in number. if ((num % 10) == dgt) // Return true if rightmost digit matches. return true; num = num / 10; // Get next digit into rightmost position. } return false; // No matches, return false. } 到达零之前找到匹配项,则它包含该数字。否则就不会。

这可能比你的字符串解决方案更快,因为它必须执行类似的操作来从整数创建字符串,然后在其上进行字符串比较。

但是,与所有优化一样,衡量,不要猜测!


而且,现在我可以访问我的VS2008开发盒了,她的一些C#代码:

{{1}}

答案 1 :(得分:2)

不,它不使用装箱,但它会创建物体。

使用字符串是一个非常好的解决方案,除非你需要非常出色的性能,否则你应该坚持下去。

你可以用数字解决它。然后,您首先需要找出x中有多少位数,以便您可以使用modulo来屏蔽number的一部分。然后,您可以循环并检查number的{​​{1}}的不同部分:

x

答案 2 :(得分:1)

如果x是单个数字:

for (int n = number; n > 0; n /= 10)
{
    int digit = number % 10;
    if (digit == x) return true;
}

如果x是多位数:

int xd = 0;
for (y = x; y > 0; y /= 10) xd++;

for (int n = number; n > 0; n /= 10)
{
    int digit = number % xd;
    if (digit == x) return true;
}