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

    一、问题描述

        给定一个十进制数N,写下从1开始,到N的所有整数,然后数一下之中所有“1”的个数。

      例如:

        N=12,(1,2,3,4,5,6,7,8,9,10,11,12)共有5个1

    二、解题思想

      假设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出现的个数类似

    三、代码实现

    #include<iostream>
    using namespace std;
    int compOneNum(int n){
        int preNum;
        int curNum;
        int proNum;
        int oneCount=0;
        //当前位的幂指数10^a
        int t=1;
        while(n/t){
            preNum=n%t;
            curNum=(n/t)%10;
            proNum=(n/t)/10;
            switch (curNum){
            case 0:
                oneCount+=proNum*t;
                break;
            case 1:
                oneCount+=proNum*t+preNum+1;
                break;
            default:
                oneCount+=(proNum+1)*t;
                break;
            }
            t=t*10;
        }
        return oneCount;
    }
    int main(){
        cout<<"请输入整数n:"<<endl;
        int n;
        cin>>n;
        int oneCount=compOneNum(n);
        cout<<oneCount<<endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    使用 Web 服务 为 ECS Linux 实例配置网站及绑定域名
    部署 LAMP
    PHP与MYSQL事务处理
    centos6 yum 安装nginx 不成功解决办法
    5.5版本以上”No input file specified“问题解决
    php访问url的四种方式
    mysql索引总结----mysql 索引类型以及创建
    承诺,项目管理中的大杀器
    什么叫工作到位?
    Java中注解Annotation的定义、使用、解析
  • 原文地址:https://www.cnblogs.com/jfcspring/p/3774640.html
Copyright © 2011-2022 走看看