zoukankan      html  css  js  c++  java
  • 大数阶乘-ny-28

    大数阶乘

    时间限制:3000 ms  |  内存限制:65535 KB

    难度:3

    描述

    我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

    输入

    输入一个整数m(0<m<=5000)

    输出

    输出m的阶乘,并在输出结束之后输入一个换行符

    样例输入

    50

    样例输出

    30414093201713378043612608166064768844377641568960512000000000000

    来源

    经典题目

    解题思路:

    1、每次乘完就立即保存在数组中,对10取余后保存,对10取整向前进位。

    #include<stdio.h>

    #include<string.h>

    #define N 100000

    int main()

    {

        int a[N],n,m,i,j,k,t,r;

        while(scanf("%d",&n)!=EOF)

        {

          memset(a,0,sizeof(a));                

          a[0]=1;   

           r=1;                   //  保存的数组长度初始值为 1;

          for(j=2;j<=n;j++)

          {

           k=0;

           for(i=0;i<=r;i++)       // 每一位分别乘以需要乘的数

            {

              t=a[i]*j+k;         // a[i],可能为0.所以结果不会多乘的。

              a[i]=t%10;

              k=t/10;

              if(i==r&&k!=0)//判断是否溢出 ,溢出则把长度加一。以便下次循环相乘

              r++;

            }

          }

          for(i=r;j>=0;i--)          //判断结果的最高位是否为0 。为零则删除。

            if(a[i])

            break; 

         for(j=i;j>=0;j--)             // 输出结果,注意 是 j=i;i是判断后的结果;

        printf("%d",a[j]);

        printf(" ");

       }

       return 0;

    }

  • 相关阅读:
    vue使用百度地图
    Genymotion模拟器使用camera
    angular集成tinymce
    react-native环境搭建
    linux系统下安装ssl证书(tomcat)
    vue图片上传及java存储图片(亲测可用)
    那些年vue踩过的坑
    垃圾分类装置仿真实训
    《报任安书》文言文化常识闯关游戏·网络版
    《报任安书》文言文化常识闯关游戏
  • 原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3224410.html
Copyright © 2011-2022 走看看