輸出所有形如aabb的4位完全平方數(即前兩位數字相等,后兩位數字也相等)


計算完全平方根可以使用math庫中的sqrt完成,但需要注意以下幾點:a取值應為1-9,b取值為0-9;完全平方得到的結果是浮點型,
因為浮點型不像整形可能有誤差的存在(TODO:浮點型計算誤差),可以使用floor(sqrt(x)+0.5)來減小誤差,這里稍微展開說下:如果sqrt(x)的結果本來是1,由於浮點計算的誤差導致結果
為0.9999,那么cast到int型其結果就是0,因此用四舍五入的方式來減少這種誤差(這涉及到浮點型的精度問題,如果精度較高的浮點表示,
那計算結果於預期的波動會相對較小,否則就可能存在較大偏差,當然現代編程語言的精度是可以適用這種方式的)

for (int a = 1; a<=9; a++) {
    for (int b = 0; b<=9; b++) {
        int n = 1100 * a + 11 * b;
        int m = floor(sqrt(a) + 0.5);
        if (m * m == n) printf("%d ", n);
    }
}

要去考慮誤差略嫌麻煩,可以使用枚舉的方式並根據aabb的特性去考慮它的千位百位以及十位個位是否分別相等

for (int i=31; ; i++) {  // 31^2為最大的小於1000的平方整數
    int n = i * i;
    if (n > 9999) break;
    
    int a = n / 100;
    int b = n % 100;
    if (a/10 == a%10 && b/10 == b%10) printf("%d", n);
}

 摘錄自<<算法競賽入門經典>>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM