本題要求實現一個函數,可統計任一整數中某個位數出現的次數。例如-21252中,2出現了3次,則該函數應該返回3。
函數接口定義:
int Count_Digit ( const int N, const int D );
其中N
和D
都是用戶傳入的參數。N
的值不超過int
的範圍;D
是[0, 9]區間內的個位數。函數須返回N
中D
出現的次數。
裁判測試程序樣例:
#include <stdio.h>
int Count_Digit ( const int N, const int D );
int main()
{
int N, D;
scanf("%d %d", &N, &D);
printf("%d\n", Count_Digit(N, D));
return 0;
}
/* 你的代碼將被嵌在這裏 */
輸入樣例:
-21252 2
輸出樣例:
3
正確版本
int Count_Digit(const int N, const int D)
{
int numFlag[10] = { 0 }, m, a;
//分情況判斷,負數轉正數,由0找0的特殊情況
if (N < 0)
m = -N;
else m = N;
if (m == 0 && D == 0)
return 1;
//取模來取出每位數,存入對應數組,重複數字每出現一次就加一
while (m)
{
a = m % 10;
m = m / 10;
numFlag[a]++;
}
return numFlag[D];
}
解釋說明
非常簡單,用numFlag[10]
數組來存放出現的每一位數字,出現一次就加一。
有兩個特殊情況要考慮到,N爲負數和爲0。
1、負數要轉化成正數,否則數組不能存入數據。
2、爲0時,找其他任何數都是0,唯獨找0時是1,如果放入下面的循環中判斷,可能會讓0的數量出錯,所以單獨拿出來寫了個判斷。可能不夠簡潔了,如果你有更好的寫法,望不吝賜教。