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;
        }

     
  • 相关阅读:
    08月24日总结
    08月23日总结
    08月22日总结
    装饰器
    卢菲菲最强大脑记忆训练法全套教程 01
    LeetCode 704 二分查找
    LeetCode 1480 一维数组的动态和
    NIO 总结
    LeetCode 881 救生艇
    url的组成部分
  • 原文地址:https://www.cnblogs.com/songmingtao/p/3223958.html
Copyright © 2011-2022 走看看