hdoj_1042N!(大规模数据处理)
发布时间
阅读量:
阅读量
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1042
题目说明中指出,待求阶乘的数值上限为10000,而10000!的位数为35660(该数值来源于网络查询),因此现有的数据类型难以满足存储需求。
思路是借助int型数组来保存n!在每一步计算过程中的结果,并确保数组的容量不低于35660这一数值。在每一步运算中,通过手动模拟乘法操作实现计算。
首先分析乘法的具体执行过程。以1234 x 67为例,手动计算时存在两种方式。
第一种方式是先将7与1234相乘,再将60与1234相乘,最后将两个中间结果进行累加。
第二种方式则是依次用67分别乘以4、3、2、1。
第二种方法更适用于代码编写。进一步观察第二种方法的具体操作流程,如下图所示(运算步骤位于右侧)

上述操作流程可总结为:首先将当前位数值相乘,随后叠加进位数值,接着对结果取余并用于替换前一位的数值,同时将商作为下一轮计算的进位值。
C++代码如下:
#include<iostream>
using namespace std;
全部评论 (0)
还没有任何评论哟~
