题目说明是1000000位不是1-1000000
就是最多要处理1000000个数字~
非法操作应该就是说数组越界了
这题可以分3种情况来考虑,如果某数位上的数字是0那么就不用管这个数
如果某数位上的数字是1,那就是sum+=(2^k);--(其中k是表示这个数位所在的位数)
如果某数位上的数字大于1,那后面每个位无论是什么(包括这位)都要归纳为第二种情况处理~
因为数据很大,所以可以每次进行*2或者<<1后和原来的数相加要%1000000007,否则会数据溢出
这题余数很大,对于第三种情况用快速幂对unsigned进行运算很容易溢出(明显题目没有顾及到用快速幂来进行优化这个问题),要另外处理,所以第一种直接算就可以了,对于第二种就是判断处理数位上是否是0就可以了~
好像还是要用到数组来保留信息,因为读取数据的时候是从最低位开始读取的~
但也可以不用数组,但这样就要先知道((2^n)-1)%1000000007的值,然后每遍历一次就进行逆运算,能不能被2整除,如果不能就加1000000007再除以2,如果能就直接除以2就可以了~
另说:
pow到底是个什么函数呢,我竟然不知道那个是怎么用的,这题的pow是用来干嘛的
嗯,看来是我对楼主程序的理解能力有很大问题~
就是最多要处理1000000个数字~
非法操作应该就是说数组越界了
这题可以分3种情况来考虑,如果某数位上的数字是0那么就不用管这个数
如果某数位上的数字是1,那就是sum+=(2^k);--(其中k是表示这个数位所在的位数)
如果某数位上的数字大于1,那后面每个位无论是什么(包括这位)都要归纳为第二种情况处理~
因为数据很大,所以可以每次进行*2或者<<1后和原来的数相加要%1000000007,否则会数据溢出
这题余数很大,对于第三种情况用快速幂对unsigned进行运算很容易溢出(明显题目没有顾及到用快速幂来进行优化这个问题),要另外处理,所以第一种直接算就可以了,对于第二种就是判断处理数位上是否是0就可以了~
好像还是要用到数组来保留信息,因为读取数据的时候是从最低位开始读取的~
但也可以不用数组,但这样就要先知道((2^n)-1)%1000000007的值,然后每遍历一次就进行逆运算,能不能被2整除,如果不能就加1000000007再除以2,如果能就直接除以2就可以了~
另说:
pow到底是个什么函数呢,我竟然不知道那个是怎么用的,这题的pow是用来干嘛的
嗯,看来是我对楼主程序的理解能力有很大问题~
[此贴子已经被作者于2018-5-9 17:29编辑过]
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]