Java 如何检查一个数字的每个数字是否大于或等于另一个数字?
每个数字都应该大于或等于另一个数字。如果所有数字相等,则返回false 示例:Java 如何检查一个数字的每个数字是否大于或等于另一个数字?,java,python,algorithm,Java,Python,Algorithm,每个数字都应该大于或等于另一个数字。如果所有数字相等,则返回false 示例: 201 >= 200 true 200 >= 200 false 200 >= 101 false 210 >= 201 false 通常的方法是不断除以10,然后比较余数 以下是Java中的代码: private boolean isScoreBetter(final int score, final int scoreToCompare) { int a = score;
201 >= 200 true
200 >= 200 false
200 >= 101 false
210 >= 201 false
通常的方法是不断除以10,然后比较余数
以下是Java中的代码:
private boolean isScoreBetter(final int score, final int scoreToCompare) {
int a = score;
int b = scoreToCompare;
int betterCount = 0;
while (a > 0 && b > 0) {
int temp = a % 10 - b % 10;
if (temp < 0) {
return false;
}
if (temp > 0) {
betterCount++;
}
a /= 10;
b /= 10;
}
return betterCount > 0 && a >= b;
}
有更好的办法吗?更好的定义:
代码必须简短而优雅
该算法更好地基于数字计算,并且不包含int->string等类型转换。
两个数字的限制:
它们是非负数
位数不一定相同
谢谢您的回复。如果您不想像您在编辑中所说的那样将数字转换为字符串,仍然有多种方法可以实现
str1 = '000'
str2 = '111'
all(a >= b for a, b in zip(str1, str2))
# False
all(a >= b for a, b in zip(str2, str1))
# True
您可以编写一个迭代器,为您提供下一个数字:
def next_digit(number):
while (number > 1):
yield number % 10
number = number // 10
然后,您可以映射所有值,并在另一个答案中使用all like:
a = 201
b = 200
res = all(map(lambda d: d[0] >= d[1], zip(next_digit(a), next_digit(b))))
print(res) # True
或者,您可以使用过滤器,查看是否有任何数字不满足条件:
res = filter(lambda d: d[0] < d[1], zip(next_digit(a), next_digit(b)))
print(res) # []
您可以将其用作上一个:
res = all(map(lambda d: d[0] >= d[1], next_two_digits(a, b)))
print(res) # True
res = filter(lambda d: d[0] < d[1], next_two_digits(a, b))
print(res) # []
或者您可以执行展开循环操作:
matching = True
for d in next_two_digits(a, b):
if (d[0] < d[1]):
matching = False
break
print(matching)
请记住,这里有一个限制,即两个数字需要有相同数量的数字。对于单个数字,则词法和数字比较是相同的,您可以在zipstrn1中对a,b使用alla>=b,strn2如何协调210>=201 false和210<201false@ReblochonMasque这是一个问题。你如何更好地定义?你是说更快,代码更小,内存更少,还是其他什么?@ChatterOne Hi Chatter,“更好”的定义是更新:
matching = True
for d in next_two_digits(a, b):
if (d[0] < d[1]):
matching = False
break
print(matching)