如何知道数字是否包含特定数字而不转换字符串?

时间:2012-12-03 15:15:12

标签: algorithm numbers

例如,我希望在不转换字符串的情况下找到包括2,7到1到7000的数字。 2 7 12 17 ... 20 21 22 23 ... 7000 数学有一个很好的算法吗? 提前谢谢你......

2 个答案:

答案 0 :(得分:3)

像这样的东西

while ( n > 0 ) {
   digit = n % 10;
   // check the digit
   n = n / 10;
}

523的例子

  1. 在第一次迭代中,您将拥有digit = 3(123%10)
  2. 在第二次迭代中,您将拥有digit = 2(12%10)
  3. 在第三位= 5(5%10)

答案 1 :(得分:2)

考虑一下,如果你将Matteo的代码放在一个循环上,它就可以了。 顺便说一句,你可以提高性能,跳过明显的数字。

例如,如果您在第三位数字上找到7,如15783,则可以跳过所有127XX(它们都是有效的!),您可以转到15800

您也可以直接构建它们。从1到7000他们是:

xxx2 xxx7
xx2x xx7x
x2xx x7xx
2xxx 7000

用0-9位替换x。 (照顾xxx2 = xx7x为0072或0172重叠......)

编辑:

提示:您不需要字符串来执行此操作。 1332 == 1 * 10 ^ 3 + 3 * 10 ^ 2 + 3 * 10 ^ 1 + 2 * 10 ^ 0