Perfect square and perfect cube

前端 未结 8 2153
离开以前
离开以前 2020-12-09 12:27

Is there any predefined function in c++ to check whether the number is square of any number and same for the cube..

8条回答
  •  忘掉有多难
    2020-12-09 12:59

    For identifying squares i tried this algorithm in java. With little syntax difference you can do it in c++ too. The logic is, the difference between every two consecutive perfect squares goes on increasing by 2. Diff(1,4)=3 , Diff(4,9)=5 , Diff(9,16)= 7 , Diff(16,25)= 9..... goes on. We can use this phenomenon to identify the perfect squares. Java code is,

        boolean isSquare(int num){
             int  initdiff = 3;
             int squarenum = 1;
             boolean flag = false;
             boolean square = false;
             while(flag != true){
    
                    if(squarenum == num){
    
                        flag = true;
                        square = true;
    
                    }else{
    
                        square = false;
                     }
                    if(squarenum > num){
    
                        flag = true;
                    }
                squarenum = squarenum + initdiff;
                initdiff = initdiff + 2;
       }
                  return square;
     }  
    

    To make the identification of squares faster we can use another phenomenon, the recursive sum of digits of perfect squares is always 1,4,7 or 9. So a much faster code can be...

      int recursiveSum(int num){
         int sum = 0;   
         while(num != 0){
         sum = sum + num%10;
         num = num/10;         
         }
         if(sum/10 != 0){         
            return recursiveSum(sum);     
         }
         else{
             return sum;
         }
    
     }
      boolean isSquare(int num){
             int  initdiff = 3;
             int squarenum = 1;
             boolean flag = false;
             boolean square = false;
             while(flag != true){
    
                    if(squarenum == num){
    
                        flag = true;
                        square = true;
    
                    }else{
    
                        square = false;
                     }
                    if(squarenum > num){
    
                        flag = true;
                    }
                squarenum = squarenum + initdiff;
                initdiff = initdiff + 2;
       }
                  return square;
     }  
    
       boolean isCompleteSquare(int a){
        // System.out.println(recursiveSum(a));
         if(recursiveSum(a)==1 || recursiveSum(a)==4 || recursiveSum(a)==7 || recursiveSum(a)==9){
    
             if(isSquare(a)){
    
                 return true;
    
             }else{
                 return false;
             }
    
    
         }else{
    
             return false;
    
    
         }
    
      }
    

提交回复
热议问题