• 1的个数


    1.题目:

    给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
    要求:
    1.写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12)  = 5。
    2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少。

    2.实现思路:

      1.分别统计1-N所有数字的个位、十位、百位、千位和万位上面1的个数。如下图所示。个位上的1用表示,十位上的1用表示,百位上的1用表示。

          

    2.各个位上1的个数通过公式计算得出。

    3.下面介绍计算的方法:

    1.随意给定一个数字N,

    2.首先分解得出各个位上的数字,这里假设个、十、百、千、万位上的数字分别为a,b,c,d,e.

       若1-N所有数字个位上1的个数为a1.则

        

       若1-N所有数字个位上1的个数为b1.则

        其他同理……

    4.源代码:

    #include<iostream>
    using namespace std;
    
    int geshu(int value)
    {
        int a,b,c,d,e,a1,b1,c1,d1,e1,sum;
        a=0;b=0;c=0;d=0;e=0;
        a=value%10;
        b=value/10;
        b=b%10;
        c=value/100;
        c=c%10;
        d=value/1000;
        d=d%10;
        e=value/10000;
        cout<<"各位上的数字分别为:"<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e;
        if(a==0)
            a1=b*1+c*10+d*100+e*1000;
        else
            a1=1+b*1+c*10+d*100+e*1000;
        if(b==0)
            b1=c*10+d*100+e*1000;
        else if(b==1)
            b1=a+1+c*10+d*100+e*1000;
        else
            b1=10+c*10+d*100+e*1000;
        if(c==0)
            c1=d*100+e*1000;
        else if(c==1)
            c1=a+1+b*10+d*100+e*1000;
        else
            c1=100+d*100+e*1000;
        if(d==0)
            d1=e*1000;
        else if(d==1)
            d1=a+1+b*10+c*100+e*1000;
        else
            d1=1000+e*1000;
        if(e==0)
            e1=0;
        else if(e==1)
            e1=a+1+b*10+c*100+d*1000;
        else
            e1=10000;
        sum=a1+b1+c1+d1+e1;
        return sum;
    }
    
    void main()
    {
        int value,sum;
        cout<<"请输入一个整数:";
        cin>>value;
        while(value<0||value>=100000)
        {
            cout<<"请重新输入:";
            cin>>value;
        }
        sum=geshu(value);
        cout<<endl<<"1的个数为:"<<sum<<endl;
    }

    5.实验结果截图

  • 相关阅读:
    slf4j绑定log4j失败
    [转]activiti5用户任务分配
    关于ajax提交的公共接口的一大用处
    jQuery插件开发方式
    centos7安装mysql
    Centos7安装JDK
    奇葩问题:spring+mybaits项目突然出现其中一些Mapper类找不到
    JAVA多线程下,获取递增的序列号
    库存扣减的流水账记录问题
    My97DatePicker使用的问题
  • 原文地址:https://www.cnblogs.com/bdqczhl/p/4550653.html
Copyright © 2020-2023  润新知