HDU4588 Count The Carries(数字统计与数字规律)

 

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4588

 

题目描述:

1)给两个数a,b;

2)  将a,b之间的数化为二进制相加;(包括a,b)

3)求总共的进位个数;

 

解题思路:

1)进位首先是在算术相应位对齐相加过程中产生的;

2)所以要模拟算术相加过程 ,总结怎样得到进位个数;

3)所以,另外考虑到时间上的可能性,不允许从a到b逐个数相加计算进位; 

     所以考虑从a到b所有数同时对应位对齐,找出相加的规则,总结出进位的统计方法;

4)由于二进制只有0,1,所以某位为0对进位没有贡献,只有1才对进位产生贡献;

     所以考虑分别统计所有从a到b某一位的1的个数之和;比如统计0到4的第二位的1的全部个数:

    00,01,10,11,100;第二位(也就是(1<<1)位)上是1的只有10,11,即十进制的2,3;所以(1<<1)

    位上1的个数总数为2;统计完所有位的个数存在数组cal[]中;

5)然后通过列举发现:对于第i位的1<<i个数中,前1<<(i-1)个数为0,后1<<(i-1)个数为1,周期为1<<i;

     所以可根据此规律完成上述a,b之间的各数位1的个数的统计,统计完数组后从低位向高位扫一遍,

     按照二进制加法进位规则累加每位的进位数,得到最终的ans.

 

解题回顾:

此题当时拿过来就想着列举找规律,盲目的列举,盲目的统计,这样是很难找出规律的,对于这题数字统计,

1)要能想到模拟二进制加法计算过程

2)要能想到按各相应位来统计,而不是盲目列举统计

3)要能将复杂问题合理有序的拆解成若干简单问题去解

 

未完待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值