大数的精确运算

问题:计算100!

很显然,用普通方法是无法保存其结果的。


问题分析:

利用整形数组或者字符数组进行拆分保存;
然后建立相应的运算规则,就可以得到运算结果。


举例:

 1234567|1234567|1234567|1234567
*                        1234567 

第一个数为1234567123456712345671234567,第二个数为1234567;
对第一个数建立一个数组num[4],将第二个数记为a;

计算规则:

for i=0 to i=3 {
    temp=num[i]*a+temp2;
    temp1=temp%(10^8);  //8代表数组每一个的位数+1
    temp2=temp/(10^8);
    将temp1保存到结果数组的i位中;
    temp2作为进数留给下一个元素;
} 最后还要处理i=4(要考虑比原来的更长)等情况

问题1:

如果数组的一个元素为0000000,那么最后将数融合后得到的结果就是0;

解决方案:

1.换成字符二维数组:在运算的时候,转换成为整形运算,或者直接建立字符运算规则;
2.补0:对每一个数与10的n次幂(根据数组每一个元素长度)进行比较,如果小于,那么补输出相应的0;


解决该题,还可以运用分治算法。

猜你喜欢

转载自blog.csdn.net/lansehuanyingyy/article/details/79982380