zoukankan      html  css  js  c++  java
  • 大数之大数阶乘 nyoj28

     

    大数阶乘

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
     
    描述
    我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
     
    输入
    输入一个整数m(0<m<=5000)
    输出
    输出m的阶乘,并在输出结束之后输入一个换行符
    样例输入
    50
    样例输出
    30414093201713378043612608166064768844377641568960512000000000000
    
    来源
    经典题目
    上传者
    张云聪
     
     
    思路分析:

    超时代码:

    #include "stdio.h"
    #include "string.h"
    #define N 100000
    int f[N];
    int main()
    {int i,j,n;
    int k;
    scanf("%d",&n);
    memset(f,0,sizeof(f));
    f[0]=1;
    for(i=2;i<=n;i++)
       {int c=0;
         for(j=0;j<N;j++)
        {int s=f[j]*i+c;
        f[j]=s%10;
        c=s/10;
     
        }
      k=j;
      }
    /*
    for(i=j;i>=0;i--)
    printf("%d",f[i]);*


      for(j=k;j>=0;j--)
        if(f[j]) break;
        for(i=j;i>=0;i--)
        printf("%d",f[i]);
        printf(" ");
        return 0;
        }

    正确代码:
    #include "stdio.h"
    #include "string.h"
    #define N 100000
    int f[N];
    int main()
    {int i,j,n;
    int k=1;
    scanf("%d",&n);
    memset(f,0,sizeof(f));
    f[0]=1;
    for(i=2;i<=n;i++)     、
       {int c=0;
         for(j=0;j<=k;j++)
        {int s=f[j]*i+c;
         f[j]=s%10;
         c=s/10;
         if(k==j && c!=0)
      k++;
        }
     
        }


      for(j=k;j>=0;j--)
        if(f[j]) break;
        for(i=j;i>=0;i--)
        printf("%d",f[i]);
        printf(" ");
        return 0;
        }

     
  • 相关阅读:
    ios学习- 10大iOS开发者最喜爱的类库
    Android开发之组件
    2015最新iOS学习线路图
    2015最新Android学习线路图
    2015最全iOS开发自学视频资料(基础+实战)
    linux服务器常用密令
    windows服务器入门 使用FileZilla搭建FTP服务
    windows服务器入门 php的安装
    hdu 1106
    hdu 1040 As Easy As A+B
  • 原文地址:https://www.cnblogs.com/songmingtao/p/3223958.html
Copyright © 2011-2022 走看看