减去一位整数
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 时,因此仅当原始 val
为 0
时才应用校正项.
我正在尝试编写一个算法程序,其中有一个步骤涉及将 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 时,因此仅当原始 val
为 0
时才应用校正项.