一个整数N中的1的个数

设计思想:

通过大量数据分解找规律

abcd 从d开始若d=0则count(1的个数)=左边的abc *d的位值(1、10、100、、) 若等欲1则count=左边的abc*d的位值(1、10、100、、),若为大于1的值则为(左边的abc +1)*d的位值(1、10、100、、) ,依次对c,b,a进行count++。

源代码:

#include<iostream>
using namespace std;
void main()
{
    int N=124;
     int weizhi=1;//标记计数1的位数(1为个位,10为十位)

    int now=0;//当前位数数字

    int down=0;//较低位数字大小(可为多位)

    int up=0;//较高位数字大小

    int count=0;
    cout<<"输入N:"<<endl;
    cin>>N;
    while(N/weizhi!=0)
    {

        //获取数字

        now=(N/weizhi)%10;

        down=N-(N/weizhi*weizhi);

        up=N/(weizhi*10);

        if(0==now)//当前数字为0时计数

        {

            count+=up*weizhi;

        }

        else if(1==now)//当前数字为1时计数

        {

            count+=up*weizhi+down+1;

        }

        else

        {

            count+=(up+1)*weizhi;

        }

        weizhi=weizhi*10;//数字左移一位
    }
    cout<<"输出1的个数:";
    cout<<count<<endl;
}

总结:从大量数据中分析有特点的几个数比如0,1,大于1的数含这些数的数,虽然做出来了但换是没弄清具体是什么原理。

原文地址:https://www.cnblogs.com/xizhenghe/p/4553322.html