Java 有人能解释一下使用%10反转整数是如何工作的吗?

Java 有人能解释一下使用%10反转整数是如何工作的吗?,java,int,modulus,Java,Int,Modulus,要反转整数并将其放入列表,可以执行以下操作,其中x是某个整数: int lastDigit = x; while(lastDigit != 0) { list.add(lastDigit % 10); lastDigit /= 10; } 因此,如果x是502,那么20和5将被添加到列表中 这显然非常有用,但直到昨天,我还认为做类似事情的唯一方法是首先将int转换为字符串 我不确定这是否只是常识,但在今天之前我还没有见过这种方法。

要反转整数并将其放入列表,可以执行以下操作,其中x是某个整数:

    int lastDigit = x;
    while(lastDigit != 0)
    {
        list.add(lastDigit % 10);
        lastDigit /= 10;
    }
因此,如果x是502,那么20和5将被添加到列表中

这显然非常有用,但直到昨天,我还认为做类似事情的唯一方法是首先将int转换为字符串

我不确定这是否只是常识,但在今天之前我还没有见过这种方法。我想了解它是如何工作的,而不是仅仅记住它


有人能解释为什么数字模10给出最后一个数字,为什么在下一次迭代中除以10给出下一个数字吗?为什么它最终会等于0?

模数运算符会给出除法计算的余数

502%10是2,因为502/10=50加上2的余数。 因此,此计算中的余数为2,这意味着2将添加到列表中

下一行的除法是使用整数算法进行的,因此502/10给出的结果是50

任何小于10的非负数都将给出零的结果,从而结束循环

将%10看作是十进制系统中最右边的最低有效位,因此是10

然后把/10想象成将所有数字右移一位,也就是小数点。很明显,你必须一直到数字为0为止。在这种情况下,所有剩余的数字都可以理解为前导零

在二进制系统中,还可以使用位运算&1和>>1,而不是模%2和整数/2除法


此处的列表附加操作add是颠倒顺序的操作。上述操作仅用于提取单个数字。

手动提取几个数字。这应该很有教育意义!这只是基本的算术。模数运算符为您提供在除法计算中获得的余数,因此502%10为2,因为502/10=50加上2的余数。下一行的除法是使用整数算法进行的,因此502/10给出的结果是50。任何小于10的非负数都将得到零的结果,结束循环。您应该了解mod函数及其用法。如果你用10来表示一个数字的模,它会返回单位数字作为余数。这里,你基本上是通过取mod,然后将数字除以10来切掉单位数字。这种算法通常用于需要处理数字的每个数字的问题。我想这只是碰巧你以前没有找到解决这类问题的方法。