• 【编程之美】2.4 1的数目


    这道题其实是做过了的,在http://www.cnblogs.com/dplearning/p/3921535.html

    但是再次做还是相当的糟糕。又看了一遍答案。

    关键:要求每一位上1的个数, 其任意一位上1的个数受当前位、高位、低位三方面的影响。 注意这三位怎么求,注意数据类型。注意循环条件。

    #include <stdio.h>
    
    long long Sum1s(unsigned long long n)
    {
        unsigned long long iCount = 0;
        unsigned long long iFactor = 1;
    
        unsigned long long iCurrent = 0;
        unsigned long long iHigher = 0;
        unsigned long long iLower = 0;
    
        while(n/iFactor != 0)
        {
            iHigher = n / (iFactor * 10);
            iLower = n % iFactor;
            iCurrent = (n / iFactor) % 10;
    
            switch(iCurrent)
            {
            case 0: iCount += iHigher * iFactor; break;
            case 1: iCount += iHigher * iFactor + iLower + 1; break;
            default: iCount += (iHigher + 1) * iFactor; break;
            }
    
            iFactor *= 10;
        }
        return iCount;
    }
    
    int main()
    {
        long long num = Sum1s(123);
        return 0;
    }

     扩展问题,如果数字不是10进制的如何:

    很简单,把所有用到10的地方都换成需要的进制数就可以了。

    long long Sum1sDifferentFactor(unsigned long long n, unsigned char factor)
    {
        unsigned long long iCount = 0;
        unsigned long long iFactor = 1;
    
        unsigned long long iCurrent = 0;
        unsigned long long iHigher = 0;
        unsigned long long iLower = 0;
    
        while(n/iFactor != 0)
        {
            iCurrent = (n / iFactor) % factor;
            iHigher = n / (iFactor * factor);
            iLower = n % iFactor;
    
            switch(iCurrent)
            {
            case 0: iCount += iHigher * iFactor; break;
            case 1: iCount += iHigher * iFactor + iLower + 1; break;
            default: iCount += (iHigher + 1) * iFactor; break;
            }
            
            iFactor *= factor;
        }
        return iCount;
    }
  • 相关阅读:
    根据方法名执行方法的例子
    修改cmd的默认路径
    事件处理程序的处理顺序问题
    类型事件定义
    修改应用程序搜索程序集的私有路径
    What's New in Visual Studio 2010
    IE 8 中选项卡通过颜色分组
    再谈CLR:无法避免的装箱
    环境变量(Environment Variable)那点事
    默认情况下程序启动后到底是几个线程?
  • 原文地址:https://www.cnblogs.com/dplearning/p/4031358.html
Copyright © 2020-2023  润新知