1

例如,我想在不转换字符串的情况下从 1 到 7000 查找包括 2,7 在内的数字。2 7 12 17 ... 20 21 22 23...7000 有没有好的数学算法?先感谢您...

4

2 回答 2

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)
于 2012-12-03T15:20:29.497 回答
2

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

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

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

xxx2 xxx7
xx2x xx7x
x2xx x7xx
2xxx 7000

替换x为 0-9 位。(注意重叠,如 xxx2 = xx7x for 0072 或 0172 ...)

编辑:

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

于 2012-12-03T15:37:41.840 回答