求解释一段小程序的意思

发布于 2022-09-01 18:35:16 字数 260 浏览 14 评论 0

给定一个正整数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;

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我的痛♀有谁懂 2022-09-08 18:35:16

由于公司网络原因,这里不能发太长的内容,先贴一段我“翻译”后的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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文