fork(1) download
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. // Let's see if this works !!!
  6. // (After all, I might have screwed up somewhere, so there's no guarantees!)
  7.  
  8. unsigned int sqrtOfLong(unsigned long x) {
  9. // inspired by https://w...content-available-to-author-only...e.com/watch?v=haaCoVrGd6k
  10. unsigned long leftover = x;
  11. unsigned long leftoverStep = 0UL;
  12. unsigned long result = 0UL;
  13. unsigned long resultStep = 0x40000000UL;
  14. do {
  15. leftoverStep >>= 1;
  16. result >>= 1;
  17. if ((leftoverStep + resultStep) <= leftover) {
  18. leftoverStep += resultStep;
  19. leftover -= leftoverStep;
  20. result += resultStep;
  21. leftoverStep += resultStep;
  22. }
  23. resultStep >>= 2;
  24. } while (resultStep);
  25. return ((unsigned int)result);
  26. }
  27.  
  28. int main() {
  29. unsigned long ok = 0;
  30. unsigned long ng = 0;
  31.  
  32. for (unsigned long i = 0; i <= 30; i++) {
  33. unsigned long qu = i * i;
  34. unsigned int rt = sqrtOfLong(qu);
  35. cout << setw(5) << i << " " << setw(5) << qu << " " << setw(5) << rt << "\n";
  36. if (i == rt) {
  37. ok++;
  38. }
  39. else {
  40. ng++;
  41. }
  42. cout << "\n";
  43. qu += (2*i);
  44. rt = sqrtOfLong(qu);
  45. cout << setw(5) << i << " " << setw(5) << qu << " " << setw(5) << rt << "\n";
  46. if (i == rt) {
  47. ok++;
  48. }
  49. else {
  50. ng++;
  51. }
  52. }
  53. cout << "\n";
  54. cout << "OK: " << ok << "\n";
  55. cout << "NG: " << ng << "\n";
  56.  
  57. // your code goes here
  58. return 0;
  59. }
Success #stdin #stdout 0s 4384KB
stdin
Standard input is empty
stdout
    0      0      0

    0      0      0
    1      1      1

    1      3      1
    2      4      2

    2      8      2
    3      9      3

    3     15      3
    4     16      4

    4     24      4
    5     25      5

    5     35      5
    6     36      6

    6     48      6
    7     49      7

    7     63      7
    8     64      8

    8     80      8
    9     81      9

    9     99      9
   10    100     10

   10    120     10
   11    121     11

   11    143     11
   12    144     12

   12    168     12
   13    169     13

   13    195     13
   14    196     14

   14    224     14
   15    225     15

   15    255     15
   16    256     16

   16    288     16
   17    289     17

   17    323     17
   18    324     18

   18    360     18
   19    361     19

   19    399     19
   20    400     20

   20    440     20
   21    441     21

   21    483     21
   22    484     22

   22    528     22
   23    529     23

   23    575     23
   24    576     24

   24    624     24
   25    625     25

   25    675     25
   26    676     26

   26    728     26
   27    729     27

   27    783     27
   28    784     28

   28    840     28
   29    841     29

   29    899     29
   30    900     30

   30    960     30

OK: 62
NG: 0