2017-05-29 1 views
0

指数のべき乗に基数を計算するコードを作成しています。任意のBaseと非負の指数を入力すると、コードが正しいように見えます。XをNの倍数にします。負の指数ではコードが機能しません

コードは以下の通りです:

#include <iostream> 
using namespace std; 

int n; //The Exponent 
int x; //The Base 
double result; 

int main(){ 
    pleaseInput: 
    cout << "Enter Base: "; 
    cin >> x; 
    cout << "Now enter Exponent: "; 
    cin >> n; 
    //If the base is 0 could be tricky... 
    if(x==0){ 
     if(n==0){ 
      //0^0 = 1 
      result = 1; 
     }else if(n>0){ 
      //0^3 = 0 
      result = 0; 
     }else if(n<0){ 
      //0^-2 is undefined. 
      cout << "0 to the power of a negative exponent is an undefined math operation. Please enter valid data. " << endl; 
      goto pleaseInput; 
     } 
    //If the base is other than 0... 
    }else{ 
     //If the exponent is not 0... 
     if(n!=0){ 
      //Make the exponent unsigned to know the amoun of iterations regardless its sign. 
      unsigned int exp = (unsigned int)n; 
      result = 1; 
      for(int i=0;i<exp;i++){ 
       result *= x;  
      } 
      //If the exponent was negative... 
      if(n<0){ 
       result = 1/result;   
      } 
     //If X^0.... 
     }else{ 
      result = 1; 
     } 
     cout << x <<" to the power of "<< n <<" equals "<< result << endl; 
    } 
} 

君たちを見て、間違いがどこにあるか私が見つけるのを助けることができますか?

ありがとうございます!ギルモモ。 。

+4

この行 'unsigned int exp =(unsigned int)n;'はあなたが望むことをしません。デバッガを使って、 'n'が負のときに代入の後で' exp'を調べます。 –

+0

FYIそこには、宿題の問題ではないと仮定して、標準の関数std :: powがあります。 – iehrlich

+1

FYI 2.0:= [0^0は1ではありません] –

答えて

1

まず、私が正しくやっていないと私は言い訳をしますが、それは私の初めてのことです。 - 必要に応じてループを何度でも反復する指数から記号「」

unsigned int exp = (unsigned int)n; 

が、私は可能性を除去するためにそれを使用:OP上のコードで

は、声明がありました。あなたの助けのための

unsigned int exp = abs(n); 

みんなありがとう:

@RichardCrittenは、この行は私が期待したものやっていなかった、と私は最終的にこれを行う方法があったことを認識することを教えてくれました!

関連する問題