获取在布尔值上返回 true 的最接近值
本文关键字:最接近 true 返回 布尔值 获取 | 更新日期: 2023-09-27 18:19:13
如果我想获得最接近数字的值,但该值还必须在名为 IsMultipleOf7
的布尔值上返回 true,该布尔值在 7 的倍数上返回 true。
例如,我有一个int x = 523
.所以 7 的最接近的倍数是 525,所以我的布尔值将返回真 525。
我怎样才能得到这个号码?
此函数将返回最接近的7
的倍数或数字本身(如果它是7
的倍数
public int GetClosestNumber(int number, out bool isMultipleOf7)
{
// if the number is a multiple of 7 isMultipleOf7 is set to true
isMultipleOf7 = number%7 == 0;
if (isMultipleOf7)
{
// if it's a multiple of 7 then the closest one is the number itself
return number;
}
// if it's not a multiple of 7 then try find the closest.
var lower = number - (number % 7);
var upper = (number + 7) - (number %7);
var diffL = Math.Abs(number - lower);
var diffU = Math.Abs(number - upper);
return diffL > diffU ? upper : lower;
}
下面是一个使用示例:
bool IsMultipleOf7;
// Following line will output: Closest multiple of 7 is: 525
Console.WriteLine("Closest multiple of 7 is: {0}",
GetClosestNumber(523, out IsMultipleOf7));
// Following line will output: The number itself is not a multiple of 7"
Console.WriteLine("The number itself is {0} a multiple of 7",
IsMultipleOf7 ? string.Empty: "not");
现场演示也可在此处获得
int x = 523;
while ((int)x/7!=(decimal)x/7){
x++;
}
return x;
int x = 523;
int result = ((x / 7) + 1) * 7;
如果你的数字可以除以 7 并且应该保持相同的数字,您可能需要一个更复杂的公式。或者,也许您过于简化了问题?
我能想到两种方法。第一个是我评论过的蛮力方法。如果从数字 x
开始,请对其进行测试。如果它有效,万岁!如果没有,请尝试将 1 添加到 x 并进行测试。然后从 x 中减去 1 并进行测试。然后用两个和三个来做这件事,同时上下测试。一旦您的测试返回 true,您就找到了(其中一个(最接近的数字。此方法是通用方法,适用于任何测试函数。
因为我们知道您正在使用IsMultipleOf7
作为测试,所以可以使用更智能的方法。想象一下,如果您的测试是IsMultipleOf999999999
,那将花费多少时间!在达到最接近的数字之前,可能需要测试这么多数字。相反,可以使用一些数学。首先,计算 x 模 7(对于 IsMultipleOf7
(,用 C(++( 编写x % 7
。此值告诉您 x 与小于 x 的 7 的最大倍数有多远。如果此值为 0,则 x 是 7 的倍数。如果值为 1、2 或 3,则 x 减去该值是最接近的倍数。如果值是4、5或6,x加上差值7(7 - value
(是最接近的倍数。
一些伪代码:
x = 523
value = x modulo 7
if(value == 0):
return x
if(value < 4): // that is, less than half of 7
return x - value
otherwise
return x + (7 - value)
x=7*Math.Round(((float)x)/7.0)
^最简单的解决方案就在那里;)
不需要所有这些循环和东西。
除以 7,如果小数小于 0.5,则最近的分母为下限,否则为上限。Round(( 为您做到这一点,然后只需将您的新 int 乘以 7 即可创建一个可被 7 整除的数字(因为它是一个乘以 7 的 int(。它将获得高于或低于的最接近的值。根本不需要布尔值。确保将浮点数转换为 x,以便它可以除以 7,而不会导致整数逻辑的地板。