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("
    ");
    }
     
  • 相关阅读:
    软工作业01 P18 第四题
    自我介绍
    进行代码复审训练
    源代码管理工具调查
    软工作业PSP与单元测试训练
    进行代码复审训练
    源代码管理工具
    软工作业PSP与单元测试训练
    作业
    第一堂课
  • 原文地址:https://www.cnblogs.com/wsblm/p/7929874.html
Copyright © 2011-2022 走看看