2013-03-13 59 views
2

我一直在研究一些基本的編碼,我努力想找出正確的方式來掃描整數,第一個是我的x變量,第二個是n哪個x被提升到。我嘗試5^5並用當前的代碼得到-287648。整數功率在c

#include <stdio.h> 
#include <math.h> 

void x_to_the_n (void) 
{ 
    int x=0; 
    int n =0; 
    long int y; 
    printf("Enter a integer for X and N\n"); 
    scanf("%i\n%i\n",&x,&n); 
     y=pow(x,y); 
     printf("%i \n",y); 
} 

int main(void) 
{ 
    x_to_the_n(); 
    return 0; 
} 
+1

你需要有更好的變量名稱,所以你不會混淆 – 2013-03-13 19:07:08

+2

我認爲你正在使用y,你打算使用n,正確嗎? – BlackVegetable 2013-03-13 19:07:28

回答

9

我敢肯定你的意思是:

y = pow(x, n); 
      ~~ 

你得到一個 「奇怪」 的結果,因爲y永遠不會初始化爲任何事情;你正在提高x的權力(一些垃圾),並獲得垃圾。

需要注意的是,如@ 0A0D暗示的評論,如果你使用更具描述性的變量,這個問題將更加明顯:

int base = 0; 
int exponent = 0; 
long int result; 
printf("Enter the base and exponent, on separate lines\n"); 
scanf("%i\n%i\n", &base, &exponent); 
result = pow(base, result); 
        ~~~~~~~ oops! 

而且,@icepack提到,因爲ylong int,格式應爲%li(不%i):

printf("%li\n", y); 
+1

鑑於此,'y'的打印也不正確。由於它是一個'long int',格式應該是:'printf(「%li \ n」,y);' – SomeWittyUsername 2013-03-13 19:14:51

+0

@icepack非常真實 – 2013-03-13 19:16:39

+0

更好的是:「輸入基數,回車,然後指數」或出於某種原因......不確定輸入是否被解釋爲\ r \ n或只是\ n – 2013-03-13 19:17:06

0

您正在使用y未被初始化爲pow()函數參數。

這會導致結果溢出。

-2

如果你需要一個函數來完成整數的指數,你可以嘗試這樣的事情

#include <stdio.h> 
unsigned int_pow(int n, unsigned x); 
int main(void) 
{ 
    int n, x;  
    printf("Enter an integer (n) followed by the power (x) to raise to: "); 
    scanf("%i %i", &n, &x);  
    printf("%i^%i = %i\n", n, x, int_pow(n, x));  
    return 0; 
} 
unsigned int_pow(int n, unsigned x) 
{ 
    unsigned i, a = n; 
    switch (x) 
    { 
     case 0: 
     return 1; 
     case 1: 
     return n; 
     default: 
     for (i = 1; i < x; ++i) { 
      a *= n; 
     } 
     break; 
    } 
    return a; 
} 
你可能要添加一些代碼來檢查傳遞給函數的錯誤值

。大的指數會溢出unsigned int數據類型。你可以編寫這個函數來返回一個無符號長整數,並且用一個無符號長整數形式參數x來處理更大的數字,但是如果你知道你將處理大數字,你應該使用浮點類型。

如果你知道返回值必須作爲整數類型使用,那麼這段代碼運行良好,並保存任何類型conversion.Hope它有幫助。

+1

這似乎並沒有回答手頭的實際問題。 – 2014-12-22 07:40:47