我如何知道一个数字是否包含在java中的另一个数字中



在不转换为字符串的情况下,如何知道一个数字是否包含在java中的另一个数字中?例如,如果我放123456和234,我应该打印true,但如果我放678和34,它应该打印false。

查找a是否包含b的算法如下:

  1. 找到最接近b的10个p的幂,以使用模运算查看a的最后一位
  2. a >= b时,检查a % pa的余数是否等于b;如果不是,则将a除以10(小数右移(:
static boolean aContainsB(int a, int b) {
a = Math.abs(a);
b = Math.abs(b);
int p = 1;
while (p <= b) {
p *= 10;
}

boolean contains = a == b;
while (!contains && a >= b) {
contains = a % p == b || a == b;
a /= 10;
}
return contains;
}

测试和输出:

int[][] tests = {
{234, 234}, {123, 234}, {123, 23}, {1234, 23}, {12345, 12},
{325, 1}, {210, 1}, {123, 1}, {211, 1}, {210, 10},
{91019, 10}
};
for (int[] t : tests) {
System.out.printf("%d contains %d ? %s%n", t[0], t[1], aContainsB(t[0], t[1]));
}

输出

234 contains 234 ? true
123 contains 234 ? false
123 contains 23 ? true
1234 contains 23 ? true
12345 contains 12 ? true
325 contains 1 ? false
210 contains 1 ? true
123 contains 1 ? true
211 contains 1 ? true
210 contains 10 ? true
91019 contains 10 ? true

如果您是受虐狂,您可以将数字字符串放入List/Table(使用for循环从一个数字到一个索引单元格(中,并实现类似于String对象的contains()方法
但更好更简单的方法是将int转换为String,并使用String的"contains(("。

int a = 123456;
boolean contains = String.valueOf(a).contains("234");

为什么不想转换为String

最新更新