您的位置:首页 > 其它

51Nod 1057 N的阶乘(数论)

2016-02-03 23:40 337 查看
输入N求N的阶乘的准确值。Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120
主要思路手算模拟
学习点:printf("%04d",5);  0005
printf("%-4d",5);  5   (后加三个空格)
自己代码:
#include"stdio.h"#include"stdlib.h"#define N 1000000#define mod 10000int A={0};int a_len=0;int main(){   int n;   int i,j,k;   scanf("%d",&n);   A[a_len]=1;   for(i=2;i<=n;i++)   {	   long long bin=0;	   for(k=0;k<=a_len;k++)	   {	     int m=A[k]*i+bin;	     bin=m/mod;	     A[k]=m%mod;	   }	   if(bin)  A[++a_len]=bin;   }   printf("%d",A[a_len]);   for(k=a_len-1;k>=0;k--)       printf("%04d",A[k]);  //注意控制输出格式    printf("\n");   return 0;}
大神代码 (效率略高)
#include<stdio.h>int a[9999]={1,0},n,i,c,len,j; int main()  {     scanf("%d", &n);    for ( len=1,j=2;j<=n; ++j)     {         for (c=0,i=0; i<len;++i)         {             a[i]= ( c+= a[i]*j ) % 100000; c/=100000;         }         if((a[i]=c)>0)++len;    }        printf("%d",a[--len]);    for(;len;)        printf("%05d", a[--len]);    return 0; }
大大神代码(效率高很多) 自己体会
#include <iostream>#include <cstdio>#include <algorithm>#include <string>#include <cstring>#include <vector>#include <map>#include<stdio.h>#include<math.h>using namespace std;#define ll long long#define N 1000005#define mod 100000000000000ll ans[10000000];int main(){#ifdef DONOTKNOW    freopen("in.txt","r",stdin);    freopen("out.txt","w",stdout);#endif    ll n;    scanf("%I64d",&n);        ll i,j;        ll l=0;        ans[0]=1;        for(i=1; i<=n; i+=1)        {            ll c=0;            for(j=0; j<=l; j+=1)            {                ll t=ans[j]*i+c;                ans[j]=t%mod;                c=t/mod;            }            if(c!=0)            {                ans[++l]=c;            }        }        printf("%I64d",ans[l]);        for(i=l-1; i>=0; i-=1)        {            printf("%0.14I64d",ans[i]);        }    return 0;}
互相学习,共同进步,如果觉得对你有帮助。那么顶一下吧,给我一点鼓励,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: