一个整数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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值