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)要能将复杂问题合理有序的拆解成若干简单问题去解

 

未完待续

posted on 2013-08-18 23:55  Gddxz  阅读(345)  评论(0编辑  收藏  举报

导航