此题要用大数啊。我一开始以为用longlong可以表示出来结果不行啊。。。哎。。
大致上可以这么想:
对于全1的情况比方说11111 那么可以将其分成4块(长度-1)
11*** x1
*11** x2
**11* x3
***11 x4
那么每一块就代表有两个1连续的情况。那么这样对于其他三个地方为任意值就可以不用管了所以用组合公式就可以了4*2^3
那么如果对于非全1的情况怎么统计呢:
比方说11100同样分成4块
11*** x1
*11** x2
**11* x3
然后呢我们对于x1先不考虑,同样因为其最高位为1而其后面的数不能大于100 所以当我们考虑x2x3x4时
我们假设最高位是0:则其他两位就可以任意取了2^2
我们假设最高位是1:则其统计的情况要小于100的最低位,那么我们又没有考虑第一种情况那么我们就相当于考虑其子状态1100这就是一个回溯的过程
然后由于我们没有统计第一个情况所以我们就当最高两位为11的时候统计比它大的数有多少那么从11000~11100的情况有多少种了,就是x1的统计啦。
由于我是用java写的大数应为其中乘法的实现会方便一点。我又不想用c++写大数乘法就略过了。。。
但是我在网上找了个c++的写法http://blog.csdn.net/sprithy_dream/article/details/8502884 可以借鉴下