Java 如何检查一个数字的每个数字是否大于或等于另一个数字?

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;

每个数字都应该大于或等于另一个数字。如果所有数字相等,则返回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;
    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)