例如,我想在不转换字符串的情况下从 1 到 7000 查找包括 2,7 在内的数字。2 7 12 17 ... 20 21 22 23...7000 有没有好的数学算法?先感谢您...
问问题
3732 次
2 回答
3
类似的东西
while ( n > 0 ) {
digit = n % 10;
// check the digit
n = n / 10;
}
以 523 为例
- 在第一次迭代中,您将有 digit = 3 (123 % 10)
- 在第二次迭代中,您将获得 digit = 2 (12 % 10)
- 第三位数 = 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 回答