숫자를 거듭 제곱하려면 어떻게해야합니까?
2^1
2^2
2^3
기타...
숫자를 거듭 제곱하려면 어떻게해야합니까?
2^1
2^2
2^3
기타...
답변:
cmath 라이브러리의 pow () 자세한 내용은 여기를 참조하십시오 . #include<cmath>파일 맨 위에 놓는 것을 잊지 마십시오 .
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)':-/ → cast
std::pow(2.0, 3).
pow(2, N)매개 변수로 산술 유형을받는 템플릿 함수가 있기 때문에 C ++ 11부터 모호하지 않다고 생각합니다 .
C ++에서 "^"연산자는 비트 단위 OR입니다. 권력을 높이는 데는 효과가 없습니다. x << n은 x에 2 n 횟수를 곱하는 것과 같으며 2를 거듭 제곱 할 때만 사용할 수있는 이진수의 왼쪽 시프트입니다. POW 함수는 일반적으로 작동하는 수학 함수입니다.
1 << n2를 제곱 n으로 올리는 것과 같다 2^n.
1 << n@AshishAhuja 주석 의 "1"을 왜 얻지 못한 사람들을 위해 , 시리즈는 1 << 0 = 1이후로 이렇게 되었기 때문입니다 2^0 = 1. 1 << 1 = 2이후 2^1 = 2; 1 << 2 = 4그 이후 2^2 = 4 로 ...
pow (x, y) 함수를 사용 하십시오 : 여기를 참조하십시오
math.h 만 포함하면 모든 준비가 완료됩니다.
하지만 pow( base, exp )좋은 제안을, 그것은 일반적으로 부동 소수점에서 작동하는지 유의하십시오.
이것은 원하는 것이거나 아닐 수도 있습니다. 일부 시스템에서는 누산기의 간단한 루프 곱셈이 정수 유형의 경우 더 빠릅니다.
그리고 특히 제곱의 경우 숫자를 부동 소수점 또는 정수로 곱할 수도 있습니다. 실제로 가독성의 저하 (IMHO)가 아니며 함수 호출의 성능 오버 헤드를 피할 수 있습니다.
#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);
}
https://stackoverflow.com/a/2940800/319728에 표시된대로 사용하는 pow(x,y)것이 x*x*xy 번 보다 효율적이지 않습니다 .
그래서 만약 당신이 효율성 사용하기 위해거야 x*x*x.
라이브러리를 사용 중이 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;
}
cmath, tgmath 또는 math.h 라이브러리에서 pow () 함수를 사용하십시오.
#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;
}
long double 이외의 데이터 유형으로 power를 입력하면 응답이 double로 승격됩니다. 즉, 입력을 받아 출력을 두 배로 줄 것입니다. 긴 이중 입력의 경우 리턴 유형은 긴 이중입니다. 대답을 int 사용으로 변경하기 위해 int c = (int) pow (a, b)
그러나 일부 숫자의 경우 정답보다 숫자가 적을 수 있습니다. 예를 들어 5 ^ 2를 계산 해야하는 경우 일부 컴파일러에서 답을 24.99999999999로 반환 할 수 있습니다. int로 데이터 유형을 변경하면 정답은 25가 아니라 24가됩니다. 그래서, 이렇게
int c=(int)(pow(a,b)+0.5)
이제 답이 맞을 것입니다. 또한 매우 많은 수의 경우 데이터 유형을 double to long 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으로 승격되기 때문에 발생합니다. 이러한 시나리오에 대한 사용자 정의 전원 기능 :
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 라이브러리 또는 문자열을 사용하십시오.
__된 이름 은 예약되어 있으므로 다른 것을 선택해야합니다.