我們經常碰到判讀乙個數是不是完全平方數的問題,這個問題看似非常簡單,但寫的**往往是有bug的,容易誤導初學者。下面對這個問題給出三種思路,並就其中一種最常用且最容易出問題的思路做深入分析。
要判斷乙個數是不是完全平方數,至少應該有兩種思路,一種是看它開平方以後是不是乙個整數;另一種是在一定區間內列舉x,看是否有乙個x的平方是n(我們姑且不論具體實現,這應該是兩種最開始的想法)。對於第二種思路,更常見於求一定區間內的數字有哪些是完全平方數,列舉的這種做法本身沒什麼問題。
重點是第一種思路的實現。這種思路一定會用到sqrt()函式進行開方操作,這個函式標頭檔案是
因此,它的返回值是乙個浮點數,那麼就要判斷這個浮點數是否原本是整數,有人用下面這種**來實現。
const int step=1e-6;
if((int)sqrt(n)-sqrt(x)但這個操作容易產生
誤判,關鍵在於step定義為某乙個很小的確定的數時不一定可以作為衡量標準 。當n很大的時候,step可能就不夠用了,比如n=1e12+1時,因為sqrt(n)=1000000.0000005,由於sqrt(n)與1000000的誤差小於1e-6,這個程式就會誤認為此時n是乙個完全平方數。總之,這個**是有一定問題的。
解決這個問題的更好的辦法是對取得的浮點數採用四捨五入的方法得到對應的整數m,然後判斷m*m==n是否成立。這就是判斷完全平方數的正確姿勢啦!
具體**如下:
int m=floor(sqrt(n)+0.5);
if(m*m==n)
return true;
其實除前兩種想法外,還有第三種解決方法,開拓一下思路吧。
for(int i=1;n>0;i+=2) 想想這種做法的正確性何在
n-=i;
return 0==n;
完全平方數判斷
試題描述 乙個數如果是另乙個整數的完全平方,那麼我們就稱這個數為完全平方數,也叫做平方數。例如 0,1,4,9,16,25,由鍵盤輸入正整數n,請你程式設計用迴圈判斷該數是否為完全平方數 不允許使用sqrt函式 是輸出 true 否則輸出 false 請用迴圈實現。輸入輸入乙個正整數n,且1 n 3...
python判斷完全平方數的方法
如下所示 coding utf 8 程式設計客棧 簡述 乙個整數,它加上100和加上268後都是乙個完全平方數 提問 請問該數是多少?from math import sqrt def f number f x in range 0,number m sqrt x 100 n sqrt x 268 ...
完全平方數
完全平方數 time limit 10000ms memory limit 65536k total submit 44 accepted 42 case time limit 1000ms description 由1 9九個數字組成的全排列可以被看作是乙個九位數,程式設計求出這些九位數中第n個完...