Wie erhebe ich eine Zahl zu einer Potenz?
2^1
2^2
2^3
etc...
Wie erhebe ich eine Zahl zu einer Potenz?
2^1
2^2
2^3
etc...
Antworten:
pow () in der cmath-Bibliothek. Mehr Infos hier . Vergessen Sie nicht, #include<cmath>
oben in die Datei zu setzen.
std::pow
im <cmath>
Header hat diese Überladungen:
pow(float, float);
pow(float, int);
pow(double, double); // taken over from C
pow(double, int);
pow(long double, long double);
pow(long double, int);
Jetzt können Sie nicht einfach tun
pow(2, N)
mit N ein int zu sein, weil es nicht dem von nicht kennt float
, double
oder long double
Version es dauern soll, und Sie würden einen Zweideutigkeit Fehler. Alle drei würden eine Konvertierung von int in Gleitkomma benötigen, und alle drei sind gleich teuer!
Stellen Sie daher sicher, dass das erste Argument so eingegeben wird, dass es perfekt zu einem dieser drei Argumente passt. Ich benutze normalerweisedouble
pow(2.0, N)
Wieder ein Anwalt von mir. Ich bin selbst oft in diese Falle geraten, deshalb werde ich Sie davor warnen.
int N; pow(2.0, N)
wäre immer noch mehrdeutig :: could be 'pow(double,int)' or 'pow(double,double)'
- / → Besetzung
std::pow(2.0, 3)
.
pow(2, N)
seit C ++ 11 eindeutig, da es eine Vorlagenfunktion gibt, die einen beliebigen arithmetischen Typ als Parameter empfängt.
In C ++ ist der Operator "^" ein bitweises ODER. Es funktioniert nicht, um sich zu einer Macht zu erheben. Das x << n ist eine Linksverschiebung der Binärzahl, die der Multiplikation von x mit 2 n entspricht und nur verwendet werden kann, wenn 2 auf eine Potenz angehoben wird. Die POW-Funktion ist eine mathematische Funktion, die generisch funktioniert.
1 << n
ist das gleiche wie das Erhöhen von 2 auf die Potenz n oder 2^n
.
1 << n
@AshishAhuja Kommentar ist, ist es, weil die Serie 1 << 0 = 1
seitdem so läuft 2^0 = 1
; 1 << 1 = 2
seit 2^1 = 2
; 1 << 2 = 4
seit 2^2 = 4
und so weiter ...
Verwenden Sie die Funktion pow (x, y): Siehe hier
Fügen Sie einfach math.h hinzu und schon sind Sie fertig.
Dies pow( base, exp )
ist zwar ein guter Vorschlag, aber beachten Sie, dass er normalerweise im Gleitkomma funktioniert.
Dies kann oder kann nicht das sein, was Sie wollen: Auf einigen Systemen ist eine einfache Schleife, die auf einem Akkumulator multipliziert wird, für ganzzahlige Typen schneller.
Und für Quadrate können Sie die Zahlen genauso gut selbst multiplizieren, Gleitkomma oder Ganzzahl. Es ist nicht wirklich eine Abnahme der Lesbarkeit (IMHO) und Sie vermeiden den Leistungsaufwand eines Funktionsaufrufs.
Ich habe nicht genug Ruf, um Kommentare abzugeben, aber wenn Sie gerne mit QT arbeiten, haben sie eine eigene Version.
#include <QtCore/qmath.h>
qPow(x, y); // returns x raised to the y power.
Oder wenn Sie QT nicht verwenden, hat cmath im Grunde das Gleiche.
#include <cmath>
double x = 5, y = 7; //As an example, 5 ^ 7 = 78125
pow(x, y); //Should return this: 78125
#include <iostream>
#include <conio.h>
using namespace std;
double raiseToPow(double ,int) //raiseToPow variable of type double which takes arguments (double, int)
void main()
{
double x; //initializing the variable x and i
int i;
cout<<"please enter the number";
cin>>x;
cout<<"plese enter the integer power that you want this number raised to";
cin>>i;
cout<<x<<"raise to power"<<i<<"is equal to"<<raiseToPow(x,i);
}
// Definition der Funktion liftToPower
double raiseToPow(double x, int power)
{
double result;
int i;
result =1.0;
for (i=1, i<=power;i++)
{
result = result*x;
}
return(result);
}
Wenn Sie sich nur mit base_2 befassen möchten, empfehle ich die Verwendung des Linksverschiebungsoperators << anstelle der Mathematikbibliothek .
Beispielcode :
int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}
Beispielausgabe:
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
Viele Antworten haben pow()
oder ähnliche Alternativen oder ihre eigenen Implementierungen vorgeschlagen. Um jedoch die Beispiele gegeben ( 2^1
, 2^2
und 2^3
) in Frage, würde ich raten , ob Sie nur erhöhen müssen , 2
um eine ganzzahlige Potenz. Wenn dies der Fall ist, würde ich Ihnen empfehlen, 1 << n
für zu verwenden 2^n
.
Beachten Sie, dass die Verwendung von pow(x,y)
weniger effizient ist als x*x*x
y-mal, wie hier gezeigt und beantwortet https://stackoverflow.com/a/2940800/319728 .
Also, wenn Sie Effizienz nutzen möchten x*x*x
.
Ich benutze die Bibliothek cmath
oder math.h
um die Bibliotheksfunktionen zu nutzen pow()
, die sich um die Befugnisse kümmern
#include<iostream>
#include<cmath>
int main()
{
double number,power, result;
cout<<"\nEnter the number to raise to power: ";
cin>>number;
cout<<"\nEnter the power to raise to: ";
cin>>power;
result = pow(number,power);
cout<<"\n"<< number <<"^"<< power<<" = "<< result;
return 0;
}
Zuerst hinzufügen, #include <cmath>
dann können Sie die pow
Methode in Ihrem Code verwenden, zum Beispiel:
pow(3.5, 3);
Welches 3.5 ist Basis und 3 ist exp
Verwenden Sie die Funktion pow () in der Bibliothek cmath, tgmath oder math.h.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;
cout << pow(a,b) << endl; // this calculates a^b
return 0;
}
Beachten Sie, dass die Antwort auf die von double hochgestuft wird, wenn Sie die Leistung als einen anderen Datentyp als long double eingeben. Das heißt, es wird Eingabe genommen und Ausgabe als doppelt ausgegeben. Für lange Doppeleingänge ist der Rückgabetyp Long Double. zum Ändern der Antwort in int use ist int c = (int) pow (a, b)
Beachten Sie jedoch, dass dies bei einigen Zahlen zu einer Zahl führen kann, die unter der richtigen Antwort liegt. Wenn Sie beispielsweise 5 ^ 2 berechnen müssen, kann die Antwort auf einigen Compilern als 24.99999999999 zurückgegeben werden. Wenn Sie den Datentyp in int ändern, lautet die Antwort 24 statt 25 die richtige Antwort. Also mach das
int c=(int)(pow(a,b)+0.5)
Jetzt ist Ihre Antwort richtig. Bei sehr großen Zahlen gehen Daten verloren, wenn der Datentyp double in long long int geändert wird. Zum Beispiel schreibst du
long long int c=(long long int)(pow(a,b)+0.5);
und geben Sie Eingabe a = 3 und b = 38 ein, dann wird das Ergebnis 1350851717672992000 sein, während die richtige Antwort 1350851717672992089 lautet. Dies geschieht, weil die Funktion pow () 1.35085e + 18 zurückgibt, die als 1350851717672992000 auf int heraufgestuft wird. Ich schlage vor, a zu schreiben benutzerdefinierte Power-Funktion für solche Szenarien, wie: -
long long int __pow (long long int a, long long int b)
{
long long int q=1;
for (long long int i=0;i<=b-1;i++)
{
q=q*a;
}
return q;
}
und dann rufen Sie es an, wann immer Sie möchten,
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
Verwenden Sie für Zahlen, die größer als der Bereich von long long int sind, entweder die Boost-Bibliothek oder Zeichenfolgen.
__
sind , sind reserviert, Sie sollten wahrscheinlich etwas anderes auswählen.