1. 统计数字
计算数字k在0到n中的出现的次数,k可能是0~9的一个值
样例
例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)
《通过测试100%》
class Solution {
public:
int digitCounts(int k, int n) {
// write your code here
int i = 0;
while (n >= 0)
{
int j = n;
while (j != 0)
{
if (j % 10 == k)
i++;
j = j / 10;
}
n--;
}
if(k==0)
i++;
return i;
}
};
2. 尾部的零
设计一个算法,计算出n阶乘中尾部零的个数
样例
11! = 39916800,因此应该返回 2
挑战
O(logN)的时间复杂度
《通过测试40%》
class Solution {
public:
long long trailingZeros(long long n) {
// write your code here, try to do it without arithmetic operators.
long long i = 0;
long long sum = 1;
while (n > 0)
{
long long j = n;
if (j % 10 == 0 || j % 5 == 0 || j % 2 == 0);
else
j = 1;
sum = sum * j;
if (sum % 10 == 0 || sum % 5 == 0)
{
while (sum % 10 == 0)
{
i++;
sum = sum / 10;
}
if (sum % 5 != 0)
sum = 1;
}
else
{
sum = 1;
}
n--;
}
return i;
}
};