ฉันจะเพิ่มจำนวนให้เป็นพลังได้อย่างไร
2^1
2^2
2^3
ฯลฯ ...
ฉันจะเพิ่มจำนวนให้เป็นพลังได้อย่างไร
2^1
2^2
2^3
ฯลฯ ...
คำตอบ:
std::pow
ใน<cmath>
ส่วนหัวมีโอเวอร์โหลดเหล่านี้:
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);
ตอนนี้คุณไม่สามารถทำได้
pow(2, N)
กับ N เป็น int เพราะไม่ทราบว่าของfloat
, double
หรือlong double
รุ่นที่มันควรจะใช้เวลาและคุณจะได้รับข้อผิดพลาดคลุมเครือ ทั้งสามจะต้องมีการแปลงจาก int เป็นทศนิยมและทั้งสามมีค่าใช้จ่ายเท่ากัน!
ดังนั้นอย่าลืมพิมพ์อาร์กิวเมนต์แรกเพื่อให้ตรงกับหนึ่งในสามข้อนี้อย่างสมบูรณ์แบบ ฉันมักจะใช้double
pow(2.0, N)
ทนายความบางคนอึจากฉันอีกครั้ง ฉันมักจะตกหลุมพรางนี้ด้วยตัวเองดังนั้นฉันจะเตือนคุณเกี่ยวกับเรื่องนี้
int N; pow(2.0, N)
ยังคงคลุมเครือ: could be 'pow(double,int)' or 'pow(double,double)'
- / →นักแสดง
std::pow(2.0, 3)
.
pow(2, N)
มันไม่ชัดเจนตั้งแต่ C ++ 11 เนื่องจากมีฟังก์ชันเทมเพลตที่รับประเภทเลขคณิตเป็นพารามิเตอร์
ใน C ++ ตัวดำเนินการ "^" เป็นบิตหรือ มันไม่ได้ผลสำหรับการเพิ่มพลัง x << n คือการเลื่อนไปทางซ้ายของเลขฐานสองซึ่งเหมือนกับการคูณ x ด้วยจำนวนครั้ง 2 n และสามารถใช้ได้ก็ต่อเมื่อเพิ่ม 2 เป็นเลขยกกำลัง ฟังก์ชัน POW เป็นฟังก์ชันทางคณิตศาสตร์ที่จะทำงานโดยทั่วไป
1 << n
เป็นเช่นเดียวกับการเพิ่ม 2 n 2^n
อำนาจหรือ
1 << n
ความคิดเห็นของ @AshishAhuja เป็นเพราะซีรีส์เป็นแบบนี้ 1 << 0 = 1
ตั้งแต่2^0 = 1
นั้นมา 1 << 1 = 2
ตั้งแต่2^1 = 2
; 1 << 2 = 4
ตั้งแต่2^2 = 4
นั้นเป็นต้นไป ...
คุณควรจะใช้วิธี C ปกติในคณิตศาสตร์ได้
#include <cmath>
pow(2,3)
หากคุณใช้ระบบที่เหมือนยูนิกซ์ man cmath
นั่นคือสิ่งที่คุณถาม?
Sujal
ใช้ฟังก์ชัน pow (x, y): ดูที่นี่
เพียงใส่ math.h เท่านี้คุณก็พร้อมแล้ว
แม้ว่าpow( base, exp )
จะเป็นคำแนะนำที่ดี แต่โปรดทราบว่าโดยทั่วไปแล้วจะทำงานแบบทศนิยม
สิ่งนี้อาจใช่หรือไม่ใช่สิ่งที่คุณต้องการ: ในบางระบบการวนซ้ำแบบธรรมดาบนตัวสะสมจะเร็วกว่าสำหรับประเภทจำนวนเต็ม
และสำหรับกำลังสองโดยเฉพาะคุณอาจคูณตัวเลขเข้าด้วยกันด้วยตัวเองทศนิยมหรือจำนวนเต็ม ไม่ใช่การลดความสามารถในการอ่าน (IMHO) และคุณหลีกเลี่ยงค่าใช้จ่ายด้านประสิทธิภาพของการเรียกใช้ฟังก์ชัน
ฉันไม่มีชื่อเสียงมากพอที่จะแสดงความคิดเห็น แต่ถ้าคุณชอบทำงานกับ QT พวกเขาก็มีเวอร์ชั่นของตัวเอง
#include <QtCore/qmath.h>
qPow(x, y); // returns x raised to the y power.
หรือถ้าคุณไม่ได้ใช้ QT cmath ก็มีเหมือนกัน
#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);
}
// นิยามของฟังก์ชัน RaiseToPower
double raiseToPow(double x, int power)
{
double result;
int i;
result =1.0;
for (i=1, i<=power;i++)
{
result = result*x;
}
return(result);
}
ถ้าคุณต้องการที่จะจัดการกับbase_2เท่านั้นแล้วฉันขอแนะนำให้ใช้ประกอบการเปลี่ยนแปลงซ้าย<<แทนห้องสมุดคณิตศาสตร์
รหัสตัวอย่าง:
int exp = 16;
for(int base_2 = 1; base_2 < (1 << exp); (base_2 <<= 1)){
std::cout << base_2 << std::endl;
}
ตัวอย่างผลลัพธ์:
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768
มันคือผงหรือแป้งใน <math.h>
ไม่มีตัวดำเนินการ infix พิเศษเช่นใน Visual Basic หรือ Python
หลายคำตอบมีpow()
ทางเลือกที่แนะนำหรือคล้ายกันหรือการนำไปใช้งานของตนเอง แต่ให้ตัวอย่าง ( 2^1
, 2^2
และ2^3
) ในคำถามของคุณฉันเดาว่าคุณต้องการเพียงเพื่อยกระดับ2
ไปสู่การใช้พลังงานจำนวนเต็ม หากเป็นกรณีนี้ฉันขอแนะนำให้คุณใช้1 << n
สำหรับ2^n
.
pow(2.0,1.0)
pow(2.0,2.0)
pow(2.0,3.0)
ชื่อคำถามเดิมของคุณทำให้เข้าใจผิด เพียงตาราง2*2
การใช้
int power (int i, int ow) // works only for ow >= 1
{ // but does not require <cmath> library!=)
if (ow > 1)
{
i = i * power (i, ow - 1);
}
return i;
}
cout << power(6,7); //you can enter variables here
ฉันกำลังใช้ห้องสมุดcmath
หรือmath.h
เพื่อใช้ประโยชน์จากpow()
ฟังก์ชั่นห้องสมุดที่ดูแลอำนาจ
#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;
}
ก่อนอื่นให้เพิ่ม#include <cmath>
คุณสามารถใช้pow
methode ในโค้ดของคุณเช่น
pow(3.5, 3);
ซึ่ง3.5เป็นฐานและ3เป็นประสบการณ์
ใช้ฟังก์ชัน pow () ในไลบรารี cmath, tgmath หรือ 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;
}
โปรดทราบว่าหากคุณให้ input to power เป็นข้อมูลประเภทอื่นที่ไม่ใช่ long double คำตอบจะเลื่อนไปเป็น double นั่นคือจะรับอินพุตและให้เอาต์พุตเป็นสองเท่า สำหรับอินพุตคู่แบบยาวประเภทการส่งคืนคือ long double สำหรับการเปลี่ยนคำตอบเป็น int use, int c = (int) pow (a, b)
แต่โปรดทราบว่าสำหรับตัวเลขบางตัวอาจส่งผลให้ตัวเลขน้อยกว่าคำตอบที่ถูกต้อง ตัวอย่างเช่นคุณต้องคำนวณ 5 ^ 2 จากนั้นคำตอบสามารถส่งกลับเป็น 24.99999999999 ในคอมไพเลอร์บางตัว ในการเปลี่ยนชนิดข้อมูลเป็น int คำตอบจะเป็น 24 แทนที่จะเป็น 25 คำตอบที่ถูกต้อง ทำเช่นนี้
int c=(int)(pow(a,b)+0.5)
ตอนนี้คำตอบของคุณจะถูกต้อง นอกจากนี้สำหรับข้อมูลตัวเลขที่มีขนาดใหญ่มากจะสูญหายไปในการเปลี่ยนประเภทข้อมูล double เป็น long int ตัวอย่างเช่นคุณเขียน
long long int c=(long long int)(pow(a,b)+0.5);
และให้อินพุต a = 3 และ b = 38 ผลลัพธ์จะออกมาเป็น 1350851717672992000 ในขณะที่คำตอบที่ถูกต้องคือ 1350851717672992089 ซึ่งเกิดขึ้นเนื่องจากฟังก์ชัน pow () ส่งคืน 1.35085e + 18 ซึ่งได้รับการเลื่อนขั้นเป็น int เป็น 1350851717672992000 ฉันแนะนำให้เขียน a ฟังก์ชั่นพลังงานที่กำหนดเองสำหรับสถานการณ์ดังกล่าวเช่น: -
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;
}
แล้วเรียกมันได้ทุกเมื่อที่คุณต้องการ
int main()
{
long long int a,b;
cin >> a >> b;
long long int c=__pow(a,b);
cout << c << endl;
return 0;
}
สำหรับตัวเลขที่มากกว่าช่วง long long int ให้ใช้ boost library หรือ strings
__
มีสงวนไว้คุณควรเลือกอย่างอื่น