《Cracking the Coding Interview程式設計師面試金典》----從0到n中某個數字的個數

塵封的記憶0發表於2017-05-03
時間限制:3秒 空間限制:32768K 熱度指數:687
 演算法知識視訊講解

題目描述

請編寫一個方法,輸出0到n(包括n)中數字2出現了幾次。

給定一個正整數n,請返回0到n的數字中2出現了幾次。

測試樣例:
10

返回:1

思路:本道題改成針對任何數,從0到n中某個數字的個數,某個數字隨便出

#include<iostream>
using namespace std;
int countNumberOf2s(int n,int temp) {
	if (n <= 1) return 0;

	int cnt = 0, k;
	for (int i = 1; k = n / i; i *= 10) {
		// k / 10 為高位的數字。
		cnt += (k / 10) * i;
		// 當前位的數字。
		int cur = k % 10;
		if (cur > temp) {
			cnt += i;
		}
		else if (cur == temp) {
			// n - k * i 為低位的數字。
			cnt += n - k * i + 1;
		}
	}
	return cnt;
}
int main()
{
int m;
int n;
	while (cin >> n>>m)
	{
		cout<<countNumberOf2s(n,m)<<endl;
	}
	return 0;
}

不懂的可以加我的QQ群:261035036(IT程式設計師面試寶典

群) 歡迎你到來哦,看了博文給點腳印唄,謝謝啦~~


相關文章