Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不需要循环就可以做到这一点吗?_C#_Function_Loops - Fatal编程技术网

C# 不需要循环就可以做到这一点吗?

C# 不需要循环就可以做到这一点吗?,c#,function,loops,C#,Function,Loops,我很难想出一个不涉及循环的解决方案。基本上,如果某个值大于某个任意数,它就会循环。假设64是数字 0 => 0 32 => 32 64 => 64 96 => 32 128 => 64 160 => 32 192 => 64 等等 我目前的做法是使用while循环,检查值是否大于64,如果大于64,则从中减去64。还有其他不涉及循环的方法吗 我使用的是C#WinForms。将值修改为64,这是一个O(1)操作。像这样: int number; // n

我很难想出一个不涉及循环的解决方案。基本上,如果某个值大于某个任意数,它就会循环。假设64是数字

0 => 0
32 => 32
64 => 64
96 => 32
128 => 64
160 => 32
192 => 64
等等

我目前的做法是使用while循环,检查值是否大于64,如果大于64,则从中减去64。还有其他不涉及循环的方法吗


我使用的是C#WinForms。

将值修改为64,这是一个O(1)操作。像这样:

int number;
// number is initialized
number %= 64;

在可被64等分的情况下,仅模是没有帮助的

if (number == 0)
    return 0;
var mod = number % 64;
return (mod == 0) ? 64 : mod;
公共静态int filterNumber(int x,int arbitraryNumber){
if(x<任意数){
返回x;
}
int结果=x%任意数;
如果(结果==0){
返回任意数;
}
返回结果;
}

如果您能找到正确的案例,递归方法可能会更有用。你考虑过递归吗?我理解第1, 2, 3、4, 5和6行。然而根据你的描述,196应该产生196-64-64-64=4。我在你的问题中遗漏了什么?胡说八道。谢谢你捕捉到这个。对于像16这样的数字,这个操作应该返回什么?Doh。我刚才也在用模算子做别的。我想我需要睡一会儿。。呵呵。谢谢。我不会说它是O(1)。复杂度类(Big-O表示法)是使用图灵机定义的,您必须在图灵机上执行O(n)操作。只需尝试为该运算编写一个方法,而不使用整数除法。此外,使用模运算符64%64是0,而不是64。与128%64相同。有没有其他优雅的解决方案?@Gabriel我同意这是一个O(1)操作。执行模运算的开销可以被视为一个常数(1+C),它被简化为O(1)。@Oli正如我所说的:C=O(n),你也应该尝试写它。这并不能解决X%64产生0的模的情况(看看128返回64)。如果你想命名一个变量,请选择一个好的名称-mod(ulus)是操作的名称,其结果称为rem(ainder)。如果使用三元运算符,为什么不在第一个If上使用它?是的,但正如我在@Dinah的回答中提到的,mod本身并不能涵盖64的倍数的答案(这会产生0,而不是像示例所示的64)@Gabriel:如果x==0,你的答案就不会产生0;同意黛娜。。。我并没有尽可能地去寻找最小和最模糊的代码。微小的代码并不意味着优雅。别忘了代码读起来比写的多,所以不要回避描述性的变量名等@Oli:好的,希望这是可以理解的,我认为这也更容易理解,您可以快速检查它的功能。而且它更安全,因为它显示了未指明的情况。@Dinah:我在读你的评论之前才意识到,希望现在一切正常。
if (number == 0)
    return 0;
var mod = number % 64;
return (mod == 0) ? 64 : mod;
public static int filterNumber(int x, int arbitraryNumber) {
  if (x < arbitraryNumber) {
    return x;
  }

  int result = x % arbitraryNumber;
  if (result == 0) {
    return arbitraryNumber;
  }

  return result;
}