• 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.实验结果截图

  • 相关阅读:
    [转载]数据类型和Json格式 Joe
    为页面去掉下划线
    基于Spring,struts,hibernate的JYazd仿yazd及jivejdon
    tomcat下建立虚拟目录
    用例建模指南
    王老师好,学生请教个设计上的问题
    博客第一个处女作,顺便测试一下
    自定义可以和with一起工作的类
    boost cpu_timer
    静态初始化的相依性
  • 原文地址:https://www.cnblogs.com/bdqczhl/p/4550653.html
Copyright © 2020-2023  润新知