java - 我如何知道一个数字是否包含在java中的另一个数字中?
问题描述
java - 我如何知道一个数字是否包含在java中的另一个而不转换为字符串?例如,如果我输入 123456 和 234,我应该打印 true,但如果我输入 678 和 34,它应该打印 false。
解决方案
查找是否a
包含的算法b
可能如下:
- 找到
p
最接近的 10 的幂,以查看使用模运算b
的最后一位数。a
- while
a >= b
, 检查余数a % p
是否a
等于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
推荐阅读
- awk - awk 逻辑运算符
- .htaccess - 仅在 .php 文件扩展名中添加斜杠
- spring - 如何避免 Spring WebFlux 过滤器被调用两次?
- javascript - 正则表达式使用单个尾随可选 * 验证逗号分隔的字符串,但不允许试用逗号
- python - 你可以从 python 使用任务计划程序吗?
- html - 为什么我根本看不到两个 iframe?
- firebase - 从同一对象的firestore获取子集合 - React typescript
- html - 为什么我的声音没有在后台自动播放?
- python - 如何在kivymd python中转到第二页
- azure - 无法访问 docker 容器上的 RabbitMQ UI