Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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#_.net_Perfect Square - Fatal编程技术网

C# 返回大于其整数参数的第一个完全平方

C# 返回大于其整数参数的第一个完全平方,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

我需要编写一个函数,返回第一个大于其整数参数的完美平方。完美平方是等于某个整数平方的整数。例如,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(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违反了返回完美正方形???