首页 > 求解释一段小程序的意思

求解释一段小程序的意思

给定一个正整数n,请返回0到n的数字中2出现了几次。

    int result = 0;
        for (int i = 1; i <= n; i *= 10) {
            result += (n / i + 7) / 10 * i + (n / i % 10 == 2 ? n % i + 1 : 0);
        }
        return result;

为什么这样写可以实现题目要求


由于公司网络原因,这里不能发太长的内容,先贴一段我“翻译”后的Python代码,晚上下班后再更新该算法的详细解释。

result = 0
i = 1
n = 230
while i <= n:
    if i == 1:
        ''' 
        求个位上的所有2,当n的最后一位是2时这个2忽略,放到下面的`if`语句中求
        +7的意思是除去n的最后一位是2的情况,
        譬如从13开始到22,+7后/10的结果均为2,而23就是3了
        '''
        result += (n + 7) / 10
        if n % 10 == 2:    # n的个位为2时,个位的2
            result += 1
    elif i == 10:
        '''
        十位上的2,因此要先/10,+7同理,如果n的十位为2,则暂时忽略这些2,留到if中判断
        最后要x10是因为如果n的十位大于2,则十位上必然有10的倍数个2,
        譬如N=30,20-29中十位上的2有10个,具体是10的多少倍,靠(n / 10 + 7) /10来判断
        '''
        result += (n / 10 + 7) / 10 * 10
        if n / 10 % 10 == 2:    # n的十位为2时,十位的2
            result += n % 10 + 1
    elif i == 100:
        result += (n / 100 + 7) / 10 * 100
        if n / 100 % 10 == 2:
            result += n % 100 + 1
    '''
    更大的位数依次类推
    '''
    i *= 10
print result
【热门文章】
【热门文章】