Bagaimana cara meningkatkan angka menjadi kekuatan?
2^1
2^2
2^3
dll ...
Bagaimana cara meningkatkan angka menjadi kekuatan?
2^1
2^2
2^3
dll ...
Jawaban:
pow () di perpustakaan cmath. Info lebih lanjut di sini . Jangan lupa letakkan #include<cmath>
di bagian atas file.
std::pow
di <cmath>
header memiliki kelebihan ini:
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);
Sekarang Anda tidak bisa begitu saja melakukannya
pow(2, N)
dengan N menjadi int, karena tidak tahu mana float
, double
atau long double
versi harus mengambil, dan Anda akan mendapatkan error ambiguitas. Ketiganya akan membutuhkan konversi dari int ke floating point, dan ketiganya sama-sama mahal!
Oleh karena itu, pastikan untuk mengetik argumen pertama sehingga cocok dengan salah satu dari ketiga argumen tersebut dengan sempurna. Saya biasanya menggunakandouble
pow(2.0, N)
Beberapa pengacara mengerjai saya lagi. Saya sendiri sering jatuh dalam perangkap ini, jadi saya akan memperingatkan Anda tentang hal itu.
int N; pow(2.0, N)
masih akan ambigu:: could be 'pow(double,int)' or 'pow(double,double)'
- / → pemeran
std::pow(2.0, 3)
.
pow(2, N)
tidak ambigu sejak C ++ 11, karena ada fungsi templat yang menerima tipe aritmatika sebagai parameter.
Dalam C ++ operator "^" adalah bitwise OR. Itu tidak bekerja untuk meningkatkan kekuatan. X << n adalah pergeseran kiri dari angka biner yang sama dengan mengalikan x dengan 2 n beberapa kali dan itu hanya dapat digunakan saat menaikkan 2 menjadi daya. Fungsi POW adalah fungsi matematika yang akan bekerja secara umum.
1 << n
sama dengan menaikkan 2 pangkat n, atau 2^n
.
1 << n
dalam @AshishAhuja berkomentar, itu karena seri seperti ini 1 << 0 = 1
sejak itu 2^0 = 1
; 1 << 1 = 2
sejak 2^1 = 2
; 1 << 2 = 4
sejak 2^2 = 4
dan seterusnya ...
Gunakan fungsi pow (x, y): Lihat Di Sini
Cukup sertakan math.h dan Anda sudah siap.
Meskipun pow( base, exp )
merupakan saran yang bagus, perlu diketahui bahwa ini biasanya bekerja di floating-point.
Ini mungkin atau mungkin bukan yang Anda inginkan: pada beberapa sistem pengulangan loop sederhana pada akumulator akan lebih cepat untuk tipe integer.
Dan untuk bujur sangkar secara khusus, Anda bisa juga mengalikan angka-angka itu sendiri, floating-point atau integer; itu tidak benar-benar penurunan keterbacaan (IMHO) dan Anda menghindari kinerja overhead panggilan fungsi.
Saya tidak memiliki reputasi yang cukup untuk berkomentar, tetapi jika Anda suka bekerja dengan QT, mereka memiliki versinya sendiri.
#include <QtCore/qmath.h>
qPow(x, y); // returns x raised to the y power.
Atau jika Anda tidak menggunakan QT, cmath pada dasarnya memiliki hal yang sama.
#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);
}
// definisi fungsi raisToPower
double raiseToPow(double x, int power)
{
double result;
int i;
result =1.0;
for (i=1, i<=power;i++)
{
result = result*x;
}
return(result);
}
jika Anda hanya ingin berurusan dengan base_2 maka saya sarankan menggunakan operator shift kiri << bukan perpustakaan matematika .
Kode sampel :
int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}
output sampel:
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
Banyak jawaban telah menyarankan pow()
atau alternatif serupa atau implementasi mereka sendiri. Namun, dengan memberikan contoh ( 2^1
, 2^2
dan 2^3
) dalam pertanyaan Anda, saya kira apakah Anda hanya perlu meningkatkan 2
daya integer. Jika hal ini terjadi, saya akan menyarankan Anda untuk menggunakan 1 << n
untuk 2^n
.
Perhatikan bahwa penggunaan pow(x,y)
kurang efisien daripada x*x*x
y kali seperti yang ditunjukkan dan dijawab di sini https://stackoverflow.com/a/2940800/319728 .
Jadi jika Anda menggunakan efisiensi x*x*x
.
Saya menggunakan perpustakaan cmath
atau math.h
untuk memanfaatkan pow()
fungsi perpustakaan yang mengurus kekuatan
#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;
}
Pertama tambahkan #include <cmath>
maka Anda dapat menggunakan pow
metode dalam kode Anda misalnya:
pow(3.5, 3);
Yang 3.5 adalah basis dan 3 adalah exp
gunakan fungsi pow () dalam pustaka cmath, tgmath atau 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;
}
harap dicatat bahwa jika Anda memberikan input ke kekuasaan karena semua tipe data selain panjang ganda, maka jawabannya akan naik menjadi ganda. itu akan mengambil input dan memberikan output dua kali lipat. untuk input ganda panjang, tipe pengembaliannya adalah ganda panjang. untuk mengubah jawaban untuk penggunaan int, int c = (int) pow (a, b)
Tetapi, perlu diingat untuk beberapa angka ini dapat menghasilkan angka kurang dari jawaban yang benar. jadi misalnya Anda harus menghitung 5 ^ 2, maka jawabannya dapat dikembalikan sebagai 24,99999999999 pada beberapa kompiler. pada mengubah tipe data ke int jawabannya adalah 24 daripada 25 jawaban yang benar. Jadi, lakukan ini
int c=(int)(pow(a,b)+0.5)
Sekarang, jawaban Anda benar. juga, untuk data angka yang sangat besar hilang dalam mengubah tipe data int ganda menjadi panjang. misalnya kamu menulis
long long int c=(long long int)(pow(a,b)+0.5);
dan beri input a = 3 dan b = 38 maka hasilnya akan keluar menjadi 1350851717672992000 sedangkan jawaban yang benar adalah 1350851717672992089, ini terjadi karena pow () mengembalikan fungsi 1.35085e + 18 yang dipromosikan ke int sebagai 1350851717672992000. Saya sarankan menulis sebuah fungsi daya khusus untuk skenario seperti itu, seperti: -
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;
}
dan kemudian menyebutnya kapan pun Anda mau,
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
Untuk angka yang lebih besar dari rentang int panjang, baik gunakan boost library atau string.
__
disediakan, Anda mungkin harus memilih sesuatu yang lain.