欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

妙妙屋-求小于n的所有正整数中1的个数

程序员文章站 2022-05-31 17:29:44
...
int countDigitOne(int n) {
	int ones = 0;
	for (long long m = 1; m <= n; m *= 10) {
		ones += (n / m + 8) / 10 * m + (n / m % 10 == 1) * (n%m + 1);
		//其实原公式为: ones += [(n / m + 8) / 10 * m - ones] + [((n / m % 10 == 1) * (n%m + 1)) + ones]
		//意思就是每次统计高一位为1的情况加上当本位为1时的特殊情况
	}
	return ones;
}
相关标签: 奇技淫巧 算法