HDU 1042(大数阶乘到10000)

//123*20 相当于 100*20 + 20*20+3
//常规方法N>=13就溢出
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 10000//因为每位里存储的是小于10000的数,所以缩小4倍
int vis[N];
int main()
{
    int i,j,m;
    int c,temp;
    while(scanf("%d",&m)!=EOF)
    //scanf("%d",&m);
    {
        memset(vis,0,sizeof(vis));
        vis[0]=1;
        for(i=2;i<=m;i++)
        {
            c=0;
            for(j=0;j<N;j++)
            {
                temp=vis[j]*i+c;
                vis[j]=temp%10000;//直接除1000,以提高速度会wa,可能中间结果超int了,因为数据大的话末尾会少输出3个0
                c=temp/10000;
            }
        }
        for(j=N-1;j>=0;j--)
        {
            if(vis[j])
            break;
        }
        printf("%d",vis[j]);//第一个不输出前导0
        for(i=j-1;i>=0;i--)
            printf("%04d",vis[i]);//必须加上%04
        printf("\n");
    }
   // system("pause");
    return 0;
}

 

时间: 2024-10-28 07:45:29

HDU 1042(大数阶乘到10000)的相关文章

HDU 3123 大数阶乘取模

题意:Output the answer of (0! + 1! + 2! + 3! + 4! + ... + n!)%m. 这题想难了,暴力就行的东西我竟然素因子分解那么做了,这么做素数的时候比暴力慢,不是素数的时候我也不知道快不快.. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn 11

精度计算-大数阶乘-ACM常用算法

语法  int result=factorial(int n); 参数: n: n 的阶乘 返回值: 阶乘结果的位数 注意:     本程序直接输出n!的结果,需要返回结果请保留long a[]  inlclude <math.h> 源程序:   int factorial(int n) { long a[10000]; int i,j,l,c,m=0,w; a[0]=1; for(i=1;i<=n;i++) { c=0; for(j=0;j<=m;j++) { a[j]=a[j]

阶乘 算法-网上找的c语言的求大数阶乘的答案 看不太懂这个算法 求大神解释算法

问题描述 网上找的c语言的求大数阶乘的答案 看不太懂这个算法 求大神解释算法 #include int main() { ??? int n; ??? int a[9000]; //确保保存最终运算结果的数组足够大 ???? int digit = 1; //位数 ???? int temp;?? //阶乘的任一元素与临时结果的某位的乘积结果 ???? int i, j, carry; //carry:进位 ???? printf("please in put n:n"); ??? s

HDOJ 1042 N!(大数阶乘JAVA)

Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in one line, process to the end of file. Output For each N, output N! in one line. Sample Input 1 2 3 Sample Output 1 2 6 JAVA 大数轻松AC! import java.math.Bi

c++大数阶乘的实现方法_C 语言

C++代码如下:  #include <algorithm>#include <vector>#include <cstdio>using namespace std;typedef  unsigned int Type;enum{ BASE_DATA = 10000, MAX_NUM = 100000 , MAX_SIZE = MAX_NUM+1000};struct MulOpt {Type data1;MulOpt(Type x):data1(x){}inline

POJ 1423 大数阶乘位数

题意让求一个数m阶乘的位数,可以用sum(log10(1~n))+1打表,也可以用公式 #include <iostream> #include <math.h> using namespace std; const double e= 2.718281828459 ; const double pi= 3.1415926535898 ; int main() { long long n,tt; cin>>tt; while (tt>0) { tt--; cin&

HDOJ(HDU) 2212 DFS(阶乘相关、)

Problem Description A DFS(digital factorial sum) number is found by summing the factorial of every digit of a positive integer. For example ,consider the positive integer 145 = 1!+4!+5!, so it's a DFS number. Now you should find out all the DFS numbe

HDU 1042(N!)

//123*20 相当于 100*20 + 20*20+3 //常规方法N>=13就溢出 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 10000//因为每位里存储的是小于10000的数,所以缩小4倍 int vis[N]; int main() { int i,j,m; int c,temp; while(scanf("%d",&m)!=EOF) /

HDU 3988 大数分解

题意:      这题把k素因子分解后看n!中有多少个与k对应的素因子. n!中含有素因子p的个数为n/p+n/p^2.....取整. #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef unsigned long long ll; const unsigned long long oo=92233720