Bir sayıyı bir kuvvete nasıl yükseltebilirim?
2^1
2^2
2^3
vb...
Bir sayıyı bir kuvvete nasıl yükseltebilirim?
2^1
2^2
2^3
vb...
Yanıtlar:
pow () cmath kitaplığında. Daha fazla bilgi burada . #include<cmath>
Dosyanın en üstüne koymayı unutmayın .
std::pow
içerisinde <cmath>
başlığın bu aşırı yükleme var
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);
Şimdi sadece yapamazsın
pow(2, N)
o hangi bilmediği için N, bir int olmak float
, double
ya long double
da almalı versiyonu ve bir belirsizlik hatası tanınacak. Üçünün de int'ten kayan noktaya bir dönüşüme ihtiyacı vardır ve üçü de eşit derecede maliyetlidir!
Bu nedenle, ilk argümanı bu üçünden biriyle tam olarak eşleşecek şekilde yazdığınızdan emin olun. Genellikle kullanırımdouble
pow(2.0, N)
Yine benden bir avukat saçmalığı. Ben de sık sık bu tuzağa düştüm, bu yüzden sizi bu konuda uyaracağım.
int N; pow(2.0, N)
hala belirsiz olabilir could be 'pow(double,int)' or 'pow(double,double)'
:: - / → oyuncular
std::pow(2.0, 3)
.
pow(2, N)
C ++ 11'den beri açık olduğunu düşünüyorum , çünkü herhangi bir aritmetik türü parametre olarak alan bir şablon işlevi var.
C ++ 'da "^" operatörü bitsel OR'dir. Bir güce yükseltmek için çalışmaz. X << n, ikili sayının sola kaymasıdır ve x ile 2 n sayısını çarpmakla aynıdır ve yalnızca 2'yi bir kuvvete yükseltirken kullanılabilir. POW işlevi, genel olarak çalışacak bir matematik işlevidir.
1 << n
2'yi n kuvvetine yükseltmekle aynıdır, veya 2^n
.
1 << n
@AshishAhuja'daki "1" yorumunun nedenini anlamayanlar için, çünkü dizi o 1 << 0 = 1
zamandan beri böyle devam ediyor 2^0 = 1
; 1 << 1 = 2
beri 2^1 = 2
; 1 << 2 = 4
o zamandan beri 2^2 = 4
...
Pow (x, y) işlevini kullanın: Buraya Bakın
Sadece math.h'yi ekleyin ve hazırsınız.
pow( base, exp )
Harika bir öneri olsa da, tipik olarak kayan noktada çalıştığını unutmayın.
İstediğiniz şey bu olabilir veya olmayabilir: bazı sistemlerde bir akümülatörde basit bir döngü çarpımı tamsayı türleri için daha hızlı olacaktır.
Ve özellikle kare için, sayıları kendiniz, kayan nokta veya tamsayı olarak çarpabilirsiniz; okunabilirlikte gerçekten bir azalma (IMHO) değildir ve bir işlev çağrısının performans ek yükünden kaçınırsınız.
Yorum yapacak kadar itibarım yok, ancak QT ile çalışmayı seviyorsanız, kendi sürümleri var.
#include <QtCore/qmath.h>
qPow(x, y); // returns x raised to the y power.
Veya QT kullanmıyorsanız, cmath temelde aynı şeye sahiptir.
#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);
}
// yükseltmekToPower işlevinin tanımı
double raiseToPow(double x, int power)
{
double result;
int i;
result =1.0;
for (i=1, i<=power;i++)
{
result = result*x;
}
return(result);
}
sadece base_2 ile uğraşmak istiyorsanız , matematik kitaplığı yerine sola kaydırma operatörünü << kullanmanızı öneririm .
basit kod :
int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}
örnek çıktı:
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
Birçok yanıtın önerdiği pow()
veya benzer alternatifleri veya kendi uygulamaları vardır. Ancak, örnekler (verilmiş 2^1
, 2^2
ve 2^3
sorunuzu), ben sadece zam gerekip gerekmediğini tahmin ediyorum 2
bir tamsayı güç. Bu durumda, ben kullanmak öneririm 1 << n
için 2^n
.
Https://stackoverflow.com/a/2940800/319728 burada gösterildiği ve yanıtlandığı gibi kullanımının y katından pow(x,y)
daha az verimli olduğunu unutmayın .x*x*x
Yani verimli kullanım için gidiyorsanız x*x*x
.
Kütüphaneyi cmath
ya da yetkilerle ilgilenen kütüphane işlevlerinden math.h
yararlanmak için kullanıyorumpow()
#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;
}
Önce ekleyin, #include <cmath>
ardından pow
kodunuzda method kullanabilirsiniz , örneğin:
pow(3.5, 3);
Hangi 3.5 olan baz ve 3 olan exp
cmath, tgmath veya math.h kitaplığında pow () işlevini kullanın.
#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;
}
Eğer güce long double dışında herhangi bir veri türü olarak girdi verirseniz, cevabın double'a yükseltileceğini unutmayın. yani girdi alacak ve çift olarak çıktı verecektir. uzun çift girişler için dönüş tipi uzun çifttir. yanıtı int use olarak değiştirmek için, int c = (int) pow (a, b)
Ancak, bazı sayılar için bunun doğru cevaptan daha az bir sayı ile sonuçlanabileceğini unutmayın. yani örneğin 5 ^ 2'yi hesaplamanız gerekir, bu durumda cevap bazı derleyicilerde 24.99999999999 olarak döndürülebilir. veri türünün int olarak değiştirilmesiyle yanıt, doğru yanıt 25 yerine 24 olacaktır. Öyleyse yap bunu
int c=(int)(pow(a,b)+0.5)
Şimdi cevabınız doğru olacak. ayrıca, çok büyük sayılar için veri tipinin çift uzun uzun int'e değiştirilmesinde veri kaybolur. örneğin yazarsın
long long int c=(long long int)(pow(a,b)+0.5);
ve girdiye a = 3 ve b = 38 verirseniz, sonuç 1350851717672992000 olurken doğru cevap 1350851717672992089 olur, bunun nedeni pow () fonksiyonunun 1.35085e + 18 döndürmesi ve int olarak 1350851717672992000 olarak yükselmesidir. bu tür senaryolar için özel güç işlevi, örneğin: -
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;
}
ve sonra istediğin zaman çağırmak
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
Uzun uzun int aralığından daha büyük sayılar için, destek kitaplığı veya dizeleri kullanın.
__
isimler saklıdır, muhtemelen başka bir şey seçmelisiniz.