面試OR筆試16——1的個數

題目及要求

1.1 題目描述

求從1到正整數n這n整數的十進制表示中1出現的次數。例如輸入12, 從1到12包含1的數字有1,10,11,12共出現了5次。

 

2 解答

2.1 代碼

int numberOf1(int n){
	if(n<1) return 0;
	int basen(1),base(10),num(0);
	while(!(n<base)){ // 求位數和對應的基數值
		base*=10;
		++basen;
	}
	base /= 10;
	// 先求n/base+1到n的1的個數
	num = 1<n/base ? base:1+n%base;		// 最高位1的個數
	num += n/base * (basen-1)*base/10;	// 其他位1的個數
	// 再求1到n/base的1的個數
	return num + numberOf1(n%base);
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章