Frage

Gibt es eine vordefinierte Funktion in C ++ zu überprüfen, ob die Nummer Quadrat einer Zahl und gleich für den Würfel ..

War es hilfreich?

Lösung

Nein, aber es ist einfach zu schreiben:

bool is_perfect_square(int n) {
    if (n < 0)
        return false;
    int root(round(sqrt(n)));
    return n == root * root;
}

bool is_perfect_cube(int n) {
    int root(round(cbrt(n)));
    return n == root * root * root;
}

Andere Tipps

sqrt(x), oder im Allgemeinen, pow(x, 1./2) oder pow(x, 1./3)

Zum Beispiel:

int n = 9;
int a = (int) sqrt((double) n);
if(a * a == n || (a+1) * (a+1) == n)  // in case of an off-by-one float error
    cout << "It's a square!\n";

Edit: oder allgemein:

bool is_nth_power(int a, int n) {
  if(n <= 0)
    return false;
  if(a < 0 && n % 2 == 0)
    return false;
  a = abs(a);

  int b = pow(a, 1. / n);
  return pow((double) b, n) == a || pow((double) (b+1), n) == a;
}

Versuchen Sie diese:

#include<math.h>
int isperfect(long n)
{
    double xp=sqrt((double)n);
    if(n==(xp*xp))
        return 1;
    else
        return 0;
}

Nein, es gibt kein Standard-C oder C ++ Funktionen zu prüfen, ob eine ganze Zahl ist ein perfektes Quadrat oder ein perfekter Würfel.

Wenn Sie es wollen, schnell und vermeiden sein erwähnten mit dem Float / Double-Routinen in den meisten Antworten, Code dann eine binäre Suche nur ganze Zahlen verwendet. Wenn Sie eine n mit n ^ 2

Für Quadrate identifiziert habe ich versucht, diesen Algorithmus in Java. Mit wenig Syntax Unterschied können Sie es in C ++ tun zu. Die Logik ist, wird die Differenz zwischen jeweils zwei aufeinander folgenden Quadrate perfekte vergeht 2. Diff auf die Erhöhung (1,4) = 3, Diff (4,9) = 5, Diff (9,16) = 7, Diff (16,25 ) = 9 ..... geht weiter. Wir können dieses Phänomen Einsatz die richtigen Plätze zu identifizieren. Java-Code ist,

    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;
 }  

Um die Identifizierung der Quadrate schneller machen wir ein anderes Phänomen verwenden können, die rekursive Summe der Stellen von Quadratzahlen ist immer 1,4,7 oder 9. So viel Code schneller kann ...

sein
  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;


     }

  }

Für den perfekten Platz können Sie auch tun:

if(sqrt(n)==floor(sqrt(n)))
    return true;
else
    return false;

Für den perfekten Würfel können Sie:

if(cbrt(n)==floor(cbrt(n)))
    return true;
else
    return false;

Hope, das hilft.

Wir könnten die builtin benutzen truc Funktion -

#include <math.h>

// For perfect square
bool is_perfect_sq(double n) {
    double r = sqrt(n);
    return !(r - trunc(r));
}

// For perfect cube
bool is_perfect_cube(double n) {
    double r = cbrt(n);
    return !(r - trunc(r));
}

Die effizienteste Antwort könnte dies

sein
    int x=sqrt(num)
    if(sqrt(num)>x){
    Then its not a square root}
    else{it is a perfect square}

Diese Methode funktioniert aufgrund der Tatsache, dass x ein int ist und es wird der Dezimalteil den ganzzahligen Teil nur speichern Dropdown. Wenn eine Zahl ist perfekt Quadrat einer ganzen Zahl, seine Quadratwurzel wird eine Ganzzahl sein und damit x und sqrt (x) wird gleich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top