XTU-oj-作业06补题解
作业六题解还差两题,补充一下。
B :Robb’s Problem
这道题比较有意思,一般思路:算就完了!但我们粗略的算一下,20!=2432902008176640000一共19位…更别说100甚至1000的阶乘了。
所以咋办呢,这个时候我们就要考虑一下,怎么把这么大的数储存。这里就需要灵活的运用我们的数组这种顺序储存结构。也就是我们以数组中的每一个储存单元储存一部分的数字,然后以整个一行的数组代表乘完的数字,设每个存储单元存储的大小为R个数字,则每个储存单元的权重就是10×R,用Σa[i]*(10×R)^(i-1)表示结果。
既然解决了数字太大没法存的问题,如何去乘,就成了新的问题。正常来说我们直接数乘数就好了,那对于这种把数字都储存在了数组里面我们如何乘呢?回想我们的乘法竖式,我们应该是用第二个数的每一位去乘以第一个数,同理我们也可以把已经储存在数组里面的数字的每一个储存单元看作一位然后去乘下一个数就好。
这样成就可以了吗?当然不是!我们还要考虑进位的问题,那进位进啥呢?我们在储存结果的时候是按照R位来储存的,那么我们就把超过R位的作为进位,加到下一位相乘后的结果就好了!也就是用到了取余的运算来保证结果是R位,除以R向下取整就是进位的值。
但过做到这一点恐怕还是不行!因为会超时!那我们该咋办呢?打表!用一个二位数组来搞,整个i行储存的就是i!
这样的结果是储存在数组里面,我们要去m位就可以对让i = m/R,k = m%R,然后各种逻辑思路就能找到了!
(敲了好久累了直接上代码):
1 | /* |
H 字符矩阵
这道题找规律。
看代码吧!
1 |
|
- 本文作者: Doted Wood
- 本文链接: http://example.com/2021/11/12/XTU oj/补作业6/
- 版权声明: 版权归博主所有,转载请说明来源