C# 返回大于其整数参数的第一个完全平方
我需要编写一个函数,返回第一个大于其整数参数的完美平方。完美平方是等于某个整数平方的整数。例如,16是一个完美的正方形,因为16=4*4。然而,15不是一个完美的平方,因为没有整数n,所以15=n*nC# 返回大于其整数参数的第一个完全平方,c#,.net,perfect-square,C#,.net,Perfect Square,我需要编写一个函数,返回第一个大于其整数参数的完美平方。完美平方是等于某个整数平方的整数。例如,16是一个完美的正方形,因为16=4*4。然而,15不是一个完美的平方,因为没有整数n,所以15=n*n public static int NextPerfectSquare(int inputNumber) { if (inputNumber < 0) return 0; inputNumber++; var result = Math.Sqrt(inputNumbe
public static int NextPerfectSquare(int inputNumber)
{
if (inputNumber < 0) return 0;
inputNumber++;
var result = Math.Sqrt(inputNumber);
var resultnumber = (int) result;
if (resultnumber == result) return inputNumber;
resultnumber++;
return resultnumber * resultnumber;
}
这是对的吗?在我看来是对的。处理负数,处理一些非完美平方的任意值,正确处理完美平方,所以我选择是。基本解决方案看起来不错。您可能需要考虑: 是否应将注释添加到此函数?也许不是为了考试,但值得考虑。 对参数/局部变量使用一致的大小写。考虑他们是否可以被更清楚地命名。 边界条件呢?您已经覆盖了负数大小写,但是如果inputNumber接近int.MaxValue,那么下一个完美的正方形将是>MaxValue呢? 有点 但我不愿意就此罢休,因为您可以通过运行一些测试来轻松验证这一点
System.Console.WriteLine("-10 => {0}", NextPerfectSquare(-10));
System.Console.WriteLine("0 => {0}", NextPerfectSquare(0));
System.Console.WriteLine("1 => {0}", NextPerfectSquare(1));
System.Console.WriteLine("15 => {0}", NextPerfectSquare(15));
System.Console.WriteLine("21 => {0}", NextPerfectSquare(21));
System.Console.WriteLine("24 => {0}", NextPerfectSquare(24));
System.Console.WriteLine("36 => {0}", NextPerfectSquare(36));
System.Console.WriteLine("Max => {0}", NextPerfectSquare(int.MaxValue));
System.Console.WriteLine("Min => {0}", NextPerfectSquare(int.MinValue));
-10 => 0
0 => 1
1 => 4
15 => 16
21 => 25
24 => 25
36 => 49
Max => 1
Min => 0
所以你可能会对它进行一些优化以获得额外积分
让它对大数字安全。i、 e.长/短64
使其不受最大值溢出的影响。尝试输入int.MaxValue,因为您的输入似乎正常 我个人喜欢这样的东西:
public static int Next(int inputNumber)
{
if (inputNumber < 0) return 0;
int perfectWidth = (int)Math.Floor(Math.Sqrt(inputNumber));
return (int)Math.Pow(perfectWidth + 1, 2);
}
因为我认为它显示了更清晰的逻辑。当然,这可能是我个人的偏好 您可以将代码缩减为
public static int NextPerfectSquare(int inputNumber)
{
if (inputNumber < 0) return 0;
var result = Math.Sqrt(inputNumber);
var resultnumber = (int) result;
resultnumber++;
return resultnumber * resultnumber;
}
你现在在考试吗?如果resultnumber==result…,你能澄清一行的意思吗。。。?您正在比较double和int。是的,我太困惑了,我认为如果resultnumber==结果返回inputNumber;??,则不需要这些行;???而返回inputNumber违反了返回完美正方形???