如何检查 int var 是不是包含特定数字

Posted

技术标签:

【中文标题】如何检查 int var 是不是包含特定数字【英文标题】:How to check if a int var contains a specific number如何检查 int var 是否包含特定数字 【发布时间】:2011-06-26 00:50:33 【问题描述】:

如何检查 int var 是否包含特定数字

我找不到解决方案。例如:我需要检查 int 457 是否在某处包含数字 5。

感谢您的帮助;)

【问题讨论】:

int457 并不真正“包含”数字 5。它的十进制表示可以。 【参考方案1】:
457 % 10 = 7    *

457 / 10 = 45

 45 % 10 = 5    *

 45 / 10 = 4

  4 % 10 = 4    *

  4 / 10 = 0    done

明白了吗?

这是我的回答所暗示的算法的 C 实现。它会在任何整数中找到任何数字。它基本上与 Shakti Singh 的答案完全相同,只是它适用于负整数并在找到数字后立即停止......

const int NUMBER = 457;         // This can be any integer
const int DIGIT_TO_FIND = 5;    // This can be any digit

int thisNumber = NUMBER >= 0 ? NUMBER : -NUMBER;    // ?: => Conditional Operator
int thisDigit;

while (thisNumber != 0)

    thisDigit = thisNumber % 10;    // Always equal to the last digit of thisNumber
    thisNumber = thisNumber / 10;   // Always equal to thisNumber with the last digit
                                    // chopped off, or 0 if thisNumber is less than 10
    if (thisDigit == DIGIT_TO_FIND)
    
        printf("%d contains digit %d", NUMBER, DIGIT_TO_FIND);
        break;
    

【讨论】:

酷,如果您对我的帮助感到满意,请单击对勾将其标记为您选择的答案。编程愉快! 嘿,谢谢你的回答,但我不明白你为什么使用模 10。这种问题有什么规则和关系,可能(只是说)我们需要使用 5*2?或者其他的东西?请解释你为什么使用 10 谢谢 @black: 使用 10 是因为我们使用的是基数为 10 的数字系统。例如,如果 457 是基数 8 而不是基数 10,您将使用 8 代替。但是,如果我们使用以 8 为基数,则 8 将被写为 10(以 8 为基数)(“一,零(以八为基数)”而不是“十”),因此上述答案仍然是正确的。这有意义吗? 是的,它现在很有意义。这就像从右到左从 1 到 1 消除数字一样。如何仅考虑模除法 %10 的自然部分并找出它们的 %5 除法是否会确定为0?谢谢 @black :我认为我没有遵循您的建议。考虑一下原始问题是否说明“检查 int 457 是否包含数字 7”或“检查 int 407 是否包含数字 5。您将如何解决这些问题?我会猜测您正在考虑的算法不适用于这些情况。但就像我说的,我不认为我遵循。【参考方案2】:
int i=457, n=0;

while (i>0)

 n=i%10;
 i=i/10;
 if (n == 5)
 
   printf("5 is there in the number %d",i);
 

【讨论】:

printf(" .. ") .. 双引号是 c 用于字符串的,而不是单引号......也许 abs(i) 是个好主意。 一般来说,我会在这里提供一个函数,未命中返回 0,命中返回 1;只需使用while (i != 0),它也可以处理负数。【参考方案3】:

将其转换为字符串并检查字符串是否包含字符'5'。

【讨论】:

它使用类似于模数循环的算法@matt.dolfin .. 那么,为什么要构建字符串? :) 对于数千位的整数可能更快。 % 是昂贵的。 @Marcus Johansson:为了将数字转换为字符串,您必须使用@matt.dolfin 或@Shakti Singh 指出的类似算法。加上一些开销来创建字符串加上一些开销而不是在创建的字符串中进行字符串搜索。 只是为了证明我的观点“转换为字符串并查找”不是解决问题的最佳方法:tinodidriksen.com/2010/02/07/cpp-convert-int-to-string-speed 提供了将数字转换为字符串的代码tinodidriksen.com/uploads/code/cpp/… @akira:我绝对同意这不是最有效的解决方案。但是,根据使用它的位置,额外的开销可能是微不足道的。优点是代码更具可读性且不易出错(当然是意见问题)。我通常首先选择“更清洁”的解决方案,然后在需要时进行优化。另一方面,如果您不小心并考虑如何使用代码,字符串操作可能会非常昂贵。

以上是关于如何检查 int var 是不是包含特定数字的主要内容,如果未能解决你的问题,请参考以下文章

如何检查表是不是包含特定列?

检查逗号分隔列表是不是包含特定数字[重复]

如何检查 ResultSet 是不是包含特定命名的字段?

如何检查元素是不是包含特定的类属性

如何检查句子是不是包含特定单词?

检查文件是不是存在以及是不是包含特定字符串