如何在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 == yx != y的结果是bool值,以证明你可以不使用if或@得到bool 987654329@. 问:“我需要返回true,否则返回false”,评论:“是否可以返回1,如果它是可整的,如果不是0整除?” - 是哪一个?如果后者和 X 是 int 并且您不允许使用任何条件:return results[x%3]; 其中 resultsint[] 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#中检查数字是不是可以被另一个数字整除而没有条件检查(如果,三进制等)的主要内容,如果未能解决你的问题,请参考以下文章

检查一个数字是不是可以被另一个整除的快速方法?

汇编语言,检查数字是不是可被 2 整除并在循环中打印数字的程序

检查一个数字是不是能被 6 PHP 整除

在 C# 中检查对象是不是为数字

如何检查字符串是不是包含字符或数字 C++ 和 C#

C#中如何检查文本框的输入信息是不是为数字?