zoukankan      html  css  js  c++  java
  • 编程之美-----1的数目

    /*编程之美系列:*/
    
    //01 一的数目:
    
    #include<iostream>
    using namespace std;
    //暴力:
    /*
    int f(int n)
    {
        int count=0;
        while(n)
        {
            if(n%10==1)
            {        count++;        }
            n/=10;
        }
        return count;
    }
    */
    //数学思想
    /*
      假设N=abcde为一个整数,a,b,c,d,e分别对应十进制数,如果要计算(1到N)百位出现1的个数,他将受三个因素的影响:百位以上的数,百位数和百位一下的数,具体依赖如下:
    
      分别设整数N百位以上,百位和百位一下的数字分别为:preNum,curNum,proNum,如N=abcde的三个值分别为:
    
      preNum=ab
    
        curNum=c
    
        proNum=de
    
        分三种情况讨论百位上的数字出现1的计数(用oneCount表示)
    
        情况1:百位数字为0(curNum=0),oneCount=preNum*100;
    
        情况2:百位数字为1(curNum=1),oneCount=preNum*100+proNum+1;
    
        情况3:百位数字大于1(curNum>1),oneCount=(preNum+1)*100;
    
        其他位计算1出现的个数类似
    
    
     * 对于数abcde,c这位出现1的次数分以下情况:
     * 1.若c > 1,结论是(ab + 1)* 100;
     * 2.若c == 1,结论是(ab)* 100 + de + 1;
     * 3.若c < 1,结轮是 ab * 100 + de + 1;
    */
    int f (int n)
    {
        int count=0;
        int t=1;
        int pre,cur,aft;
    
        while(n/t)
        {
            pre=(n/t)/10;//当前数的高位部分
            cur=(n/t)%10;
            aft=n%t;//当前数的低位部分
            switch(cur){
                case(0):
                    count+=pre*t;
                    break;
                case(1):
                    count+=pre*t+aft+1;
                    break;
                default:
                    count+=(pre+1)*t;
                    break;
            }
            t*=10;
        }
        return count;
    }
    
    int main(){
        cout<<"请输入整数n:"<<endl;
        int n;
        cin>>n;
        cout<<f(n)<<endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    js总结:增加和减少文本框
    java总结:字符串切割
    Spring-----ioc
    Hibernate之二级缓存
    Hibernate之HQL
    Hibernate关联关系(一对多自关联 ,多对多)
    Hibernate关联关系(一对多)
    Hibernate之主键生成策略
    如何使用hibernate完成CRUD操作
    Struts2-----文件上传与拦截器原理
  • 原文地址:https://www.cnblogs.com/tianjintou/p/4363908.html
Copyright © 2011-2022 走看看