码迷,mamicode.com
首页 > 其他好文 > 详细

大数阶乘

时间:2018-02-23 19:14:01      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:return   a记录   href   details   using   include   pre   scribe   item   

题目描述 

给定一个整数N(0≤N≤10000),求取N的阶乘

输入描述:

多个测试数据,每个测试数据输入一个数N

输出描述:

每组用一行输出N的阶乘
示例1

输入

1
2
3

输出

1
2
6
思路
刚开始看到这个题目,写了个直接乘过去的,是用long long 在提
交之前测了一下最大的数4000,程序输出0,稍微小
点的数字输出是负数,发现longlong完全不够用,后来我尝试使用数组去模拟乘法,但我最终还是没有写出来
于是翻看了这篇博客,他的程序非常巧妙,只使用了一个数组,于是我模仿着写了自己的程序
总结
先思考再动手,不要写到半路才发现行不通
#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;
#define INF 0x3f3f3f3f//可以用于memset
int num[40000];
int main()
{
    int n;
     while(cin>>n)
     {
         num[1]=1;
         int fla=1,carry=0,res;//fla记录这个大数的位数,carry记录上次乘法多余的部分
         for(int i=2;i<=n;i++)
         {
             for(int j=1;j<=fla;j++)
             {
                 res=i*num[j]+carry;
                 num[j]=res%10;
                 carry=res/10;
             }
             while(carry)
             {
                 fla++;
                 num[fla]=carry%10;
                 carry/=10;
             }
         }
         for(int i=fla;i>=1;i--)
            printf("%d",num[i]);
         printf("\n");
     }
    return 0;
}

 

大数阶乘

标签:return   a记录   href   details   using   include   pre   scribe   item   

原文地址:https://www.cnblogs.com/carcar/p/8462689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!