2016-10-17 34 views
-4

我一直在嘗試使用下面這個簡單的代碼進行函數調用,但不知何故,它一直給我一個錯誤消息,說%運算符是二進制運算符,它不適用於int。%操作符不能用於整數變量

int getDigit(int num, int index) 
{int temp; 
temp = num%pow(10,index); 
return (temp)} 

前提條件:NUM - 正整數,指數 - 發現指數的數字(如NUM = 6947,指數= 3,回報將是9

請指教, 我真的沒想到被卡住。這裏這麼久的時間

+0

二進制運算符,因爲它有兩個操作數 – Li357

+1

6947%(10 * 10 * 10)= 947。 – user4581301

+0

您知道模運算符是幹什麼的嗎? –

回答

0

VS講述權利%不可能是雙

這通常編譯:

int getDigit(int num, int index) 
{ 
    int temp; 
    temp=num%static_cast<int>(pow(10, index)); 
    return (temp); 
} 
+0

太好了。它編譯。但是數學不好呢? – user4581301

+0

爲了更好的數學視圖[這裏](http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int) –

0

我只寫這個,因爲其他答案是危險錯誤的。

下面是一個簡單,速度慢,防呆解決方案:

#include <iostream> 
#include<cmath> 
int getDigit(int num, int index) 
{ 
    // first shift index -1 digits to the right to position the indexth digit 
    while(--index) 
    { 
     num /= 10; 
    } 
    // now strip off everything after the indexth digit 
    num %= 10; 
    // could be negative, but we only want digit. Lose the sign 
    return std::abs(num); 
} 

int main() 
{ 
    std::cout <<getDigit(6947, 3) << std::endl; 
} 

輸出

9 

這裏是一個更快,更安全的非便攜式解決方案,只用一個32位整數工程。

int divisors[] = 
{ 
    1, 
    10, 
    100, 
    1000, 
    10000, 
    100000, 
    10000000, 
    100000000, 
    1000000000, 
}; 
int getDigit32(int num, int index) 
{ 
    if (index <=10) 
    { 
     return std::abs((num/divisors[index -1])%10); 
    } 
    return -1; 
} 

我認爲它可以通過生成模板元編程陣列一概而論,但我會誠實地承認我不擅長的東西。我正在努力尋找一個良好的終止條件。

相關問題