2 回答

TA貢獻1836條經(jīng)驗 獲得超3個贊
完美平方是一個可以表示為兩個相等整數(shù)的乘積的數(shù)字,因此它的 sqrt 后面必須是 int。如果您這樣做,sqroot*sqroot == num
您只是檢查 sqrt 是否正常工作。因此,有些號碼無法通過檢查,但通常情況下,您會得到比您想要的更多的號碼。
所以你需要做的只是檢查 sqrt 之后的結(jié)果是否是一個 int:
if?(sqrootd?%?1?==?0)?{?...?}
您可以做的優(yōu)化是檢查 sqrt 之前的數(shù)字是否為整數(shù)。除此之外,你的代碼對我來說看起來不錯

TA貢獻1946條經(jīng)驗 獲得超3個贊
我使用以下數(shù)學(xué)公式來找到完美的平方:
1 + 3 + 5 + 7 .... = n ^ 2
例如:1 + 3 + 5 = 9 = 3 ^ 2
和示例代碼:
int i = 1;
while (num > 0) {
num = num - i;
i = i + 2;
}
return num == 0;

TA貢獻2041條經(jīng)驗 獲得超4個贊
檢查平方根是否為整數(shù)的最佳方法,您將需要以下條件
if?((sqroot?-?Math.floor(sqroot))?==?0){
代替
if(sqroot*sqroot?==?num){
Math.sqrt() 方法查找給定數(shù)字的平方根,floor() 方法查找小于或等于參數(shù)的最大(最接近正無窮大)浮點值(這里是 sqrt 返回的平方根值) () 方法)并且等于一個數(shù)學(xué)整數(shù)。
然后我們計算兩者之間的差異來檢查差異是否為零。對于完全平方數(shù),該差值始終為零。原因是:完全平方數(shù)的平方根是整數(shù)。
添加回答
舉報