我一直在嘗試使用下面這個簡單的代碼進行函數調用,但不知何故,它一直給我一個錯誤消息,說%運算符是二進制運算符,它不適用於int。%操作符不能用於整數變量
int getDigit(int num, int index)
{int temp;
temp = num%pow(10,index);
return (temp)}
前提條件:NUM - 正整數,指數 - 發現指數的數字(如NUM = 6947,指數= 3,回報將是9
請指教, 我真的沒想到被卡住。這裏這麼久的時間
我一直在嘗試使用下面這個簡單的代碼進行函數調用,但不知何故,它一直給我一個錯誤消息,說%運算符是二進制運算符,它不適用於int。%操作符不能用於整數變量
int getDigit(int num, int index)
{int temp;
temp = num%pow(10,index);
return (temp)}
前提條件:NUM - 正整數,指數 - 發現指數的數字(如NUM = 6947,指數= 3,回報將是9
請指教, 我真的沒想到被卡住。這裏這麼久的時間
VS講述權利%不可能是雙
這通常編譯:
int getDigit(int num, int index)
{
int temp;
temp=num%static_cast<int>(pow(10, index));
return (temp);
}
太好了。它編譯。但是數學不好呢? – user4581301
爲了更好的數學視圖[這裏](http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int) –
我只寫這個,因爲其他答案是危險錯誤的。
下面是一個簡單,速度慢,防呆解決方案:
#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;
}
我認爲它可以通過生成模板元編程陣列一概而論,但我會誠實地承認我不擅長的東西。我正在努力尋找一個良好的終止條件。
二進制運算符,因爲它有兩個操作數 – Li357
6947%(10 * 10 * 10)= 947。 – user4581301
您知道模運算符是幹什麼的嗎? –