如何在C#中检查数字是不是可以被另一个数字整除而没有条件检查(如果,三进制等)
Posted
技术标签:
【中文标题】如何在C#中检查数字是不是可以被另一个数字整除而没有条件检查(如果,三进制等)【英文标题】:How to check whether number is divisible by another number WITHOUT conditional check (if, ternary, etc.) in C#如何在C#中检查数字是否可以被另一个数字整除而没有条件检查(如果,三进制等) 【发布时间】:2021-12-14 13:17:08 【问题描述】:我有一个数字,例如 X。我想检查它是否能被 Y(另一个数字)整除。如果它可以被Y整除,我需要返回1,否则返回0。但是我不允许使用if条件,三元运算符,equals等。有什么建议吗?
【问题讨论】:
return number % 3 == 0
或许?
x % 3 == 0
够好吗?
或者return (number / 3) * 3 == number
,如果你需要更花哨的。
这个赋值可能是教你x == y
或x != y
的结果是bool
值,以证明你可以不使用if
或@得到bool
987654329@.
问:“我需要返回true,否则返回false”,评论:“是否可以返回1,如果它是可整的,如果不是0整除?” - 是哪一个?如果后者和 X 是 int
并且您不允许使用任何条件:return results[x%3];
其中 results
是 int[] results = 0,1,1;
【参考方案1】:
如果变量 X
可以被 3 整除,则此表达式返回 true
X % 3 == 0
【讨论】:
【参考方案2】:你可以使用模运算符
return ((double)number) % 3.0d == 0
【讨论】:
投到double
的任何特殊原因?【参考方案3】:
不使用any条件,包括==
(其实下面也是一个条件)
基于this answer的Bit-twiddling
var mod = unchecked((uint)(a % b));
mod = ((mod - 1U) & ~mod) >> 31;
return Unsafe.As<uint, bool>(ref mod);
// for earlier versions of .Net, do the below in an unsafe method
return *(bool*)&mod;
dotnetfiddle
【讨论】:
它不工作 在小提琴 dotnetfiddle.net/NrGaFY 中为我工作,请说明它不适合你 哦,我发现 Unsafe 在 .NET 6 中可用,但在 .NET 4.7.2 中不可用 是的,在早期版本中,您必须使用不安全的指针解除引用以上是关于如何在C#中检查数字是不是可以被另一个数字整除而没有条件检查(如果,三进制等)的主要内容,如果未能解决你的问题,请参考以下文章