zoukankan      html  css  js  c++  java
  • 51nod1057-N的阶乘(大数乘法巧解)

            这道大数乘法开始我是想套板子模拟的。。然后就发现2/3的例子都wa了。(惊了)。然后在思考后发现n2的板子的确过不了这么多的大数。(不看题的下场)。所以,我在网上发现了分块求大数的方法。%%% 思路来自这位大佬的帖子>>http://blog.csdn.net/f_zyj/article/details/51187056<<

      总的来说,就是把这个乘积分成8位数(自己定)一小块,然后考虑进位,最后倒着输出来就行。

           代码如下:

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
        long mod=100000000;//这里取模,可以保证每一个块都为8位数
        long long a[10005];
        long long n,i,j,k,l,c;
        cin>>n;
        l=0;
        a[0]=1;
        for(i=1;i<=n;i++)
        {
            c=0;
            for(j=0;j<=l;j++)
            {
                a[j]=a[j]*i+c;
                c=a[j]/mod;
                a[j]%=mod;
            }
            if(c>0)
            {
                l++;
                a[l]=c;
            }
        }
        printf("%lld",a[l]);
        for(i=l-1;i>=0;i--)
        {
            printf("%08lld",a[i]);//注意输出的格式,如果格式错误会导致许多0消失
        }
        printf("
    ");
    }
     
  • 相关阅读:
    张季跃 201771010139《面向对象程序设计(java)》第三周学习总结
    实验十二
    201771010142 张燕& 杨蓉庆 实验十一 集合
    实验十 泛型程序设计技术
    第九次实验
    第八次实验
    进度条
    实验七 继承附加实验
    第六次实验
    实验四
  • 原文地址:https://www.cnblogs.com/wsblm/p/7929874.html
Copyright © 2011-2022 走看看