我試圖找出給定的數字是否是完全平方,如果是,則找出下一個完全平方,以解決這個代碼戰爭問題。
#include <cmath>
using namespace std;
long int findNextSquare(long int sq){
///如果sq是完全平方,則回傳下一個平方,否則回傳-1。
long int k = sq;
do{
k ;
//cout << round(sqrt(k)) << endl;
//cout << k << endl;
}while(pow(round(sqrt(k)), 2) != k) 。
if(pow(sqrt(sq), 2) ==sq)
return k;
else[/span
return -1;
}
我不確定為什么我的回圈在k=144時沒有終止。列印出k和round(sqrt(k))顯示,在k = 144之后,它跳到626,對此我也不知道原因。
uj5u.com熱心網友回復:
你不應該嘗試檢查一個浮點數是否等于一個整數(或浮點數)作為一個回圈條件,因為很可能存在舍入問題(導致無限回圈)。這意味著你需要重新表述你的問題,只使用整數。
- 從
從sq的根開始,在一個整數中,它可以被舍棄。 - 比較
root的square,rsq,與sq。
- 如果它較小,增加
root并再次比較 。
- 如果它相同,
sq是一個完美的平方(的root),我們可以回傳下一個平方 。
- 如果它更大,
sq不是一個完美的平方:回傳-1. 。
這可能會導致這樣的結果:
static long next_square(long sq){
long root = sqrt(sq)。
long rootSquared = root * root;
while (rootSquared < sq) {
root ;
rootSquared = root * root;
}
if (rootSquared == sq) {
root ;
return root * root;
}
return -1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/321877.html
標籤:
上一篇:輸出有一個額外的行c
下一篇:宣告常量時,模板成員函式決議失敗
