减去一位整数

Subtract 1 digit integer

我正在尝试编写一个算法程序,其中有一个步骤涉及将 1 位整数减 1。

这意味着:3 -> 2、5 -> 4、0 -> 9,等等

我当前的代码是:

int subtractByOne(int val) {
    val = val - 1;
    return (val == -1) ? 9 : val;
}

所以我的意思是,是否有任何操作或公式会改变 0 -> 9,以及其他像往常一样没有 if 分支语句的情况?

我正在考虑位操作,但我几乎找不到它。 :(

考虑

int subtractByOne(int val) {
    return (val - 1) % 10;
}

模函数应该 return 您正在寻找的东西。

您可以使用 mod:

return (val + 9) % 10;

您可以使用以下内容

Math.abs(~val<<3)+1

但它有局限性,当你想更改为 9 时它很有用,如果你想进一步更改位。

如果你想避免取模,你可以这样做:

int subtractByOne(int val) {
    val = val - 1;
    return val + ((val >> 31) & 10);
}

val >> 31 将是零,除非 val 为负,当它全部为 1 时,因此仅当原始 val0 时才应用校正项.