2015-01-14 2 views
0

나는 "i"를 그 힘 -1로 바꾸고 싶다. 그러나 다음 코드는 0을 반환합니다.정수의 힘 -1을 갖는 방법?

#include <iostream> 
using namespace std; 
int main() 
{ 
    int k; 
    cin>>k; 
    float reverse; 
    for (int i=1; i<=k; i++) 
    { 
     cout<<i<<"\t"; 

     reverse = static_cast<float> (1/i); 

     cout<< reverse<<endl; 
    } 
} 

pow()를 사용해야합니까?

답변

9

정수를 정수로 나눕니다. 항상 정수가됩니다 (즉, 0으로 반올림 됨). 따라서 1/i은 1을 제외한 모든 i에 대해 0으로 반올림됩니다 (1 임). 그러면 결과는 float로 캐스트됩니다 (단, 여전히 전체 숫자가됩니다).

reverse = 1.0f/i; // numerator is float and denominator is integer, therefore 
        // the result is a float 
3

귀하의 문제는 모두가, (1/내가) 정수 사업부는 점이다 :, 결과는 부동되기 때문에

는이 문제를 해결 분자 또는 분모 중 하나가 부동 소수점 수 있도록 1과 i는 정수입니다. C 및 C++의 정수 부분은 정수 결과를 가지므로 0으로 반올림됩니다. static_cast()는 이미 너무 늦기 때문에 0을 부동 소수점 수 (0.0)로만 변환합니다.

피연산자 중 하나가 부동 소수점 숫자 (예 : 1.0)가되어야하는 부동 소수점 나누기를 사용하면됩니다. writing (1.0/i)을 사용하면 부동 소수점 결과를 얻을 수 있습니다.