大数阶乘
Time Limit:3000MS Memory Limit:65535K
Total Submit:154 Accepted:64
Description
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
Input
输入一个整数m( 0 < m < =5000)
Output
Sample Input
50
Sample Output
30414093201713378043612608166064768844377641568960512000000000000
Hint
C 用数组
Java 用BigInteger
Source
NYIST
#include<stdio.h> int a[1000001]; int main() { int n; scanf("%d",&n); int len=1; a[1]=1; for(int i=2; i<=n; ++i) { int b=0; for(int j=1; j<=len; ++j) { int t=a[j]*i+b; a[j]=t%10; b=t/10; if(j==len&&b!=0) len++; } } for(int i=len; i>0; --i) printf("%d",a[i]); printf("\n"); }
#include<stdio.h> #include<string.h> #define N 1200 int A[N]; int main() { int n,i,j,temp,start,sc; while(1==scanf("%d",&n)) { memset(A,sizeof(A)); for(A[0]=1,i=1; i<=n; i++) for(sc=0,j=0; j<N; j++) temp=A[j]*i+sc,sc=temp/10,A[j]=temp%10; for(start=N-1; A[start]==0; --start); for(; start>=0; --start) printf("%d",A[start]); printf("\n"); } }
#include<iostream>//最优代码 #include<iomanip> using namespace std; //存储20000以内的阶乘 int a[15470]; int main() { //freopen("1.txt","r",stdin); //freopen("2.txt","w",stdout); int n; cin>>n; a[1]=1; a[0]=1; int up; for(int i=2;i<=n;++i) { up=0; for(int j=1;j<=a[0];++j) //各个位相乘 { a[j] *=i; a[j] +=up; up=a[j]/100000; a[j] %=100000; } if(up!=0) { a[0]++; a[a[0]]=up; } } if(a[0]==1) cout<<a[1]; else { cout<<a[a[0]]; for (int i=a[0]-1;i>0;i--) { cout<<setfill('0')<<setw(5)<<a[i]; } } }
import java.math.BigInteger; import java.util.Scanner; public class ny28 { public static void main(String[] args) { Scanner input = new Scanner(system.in); int a = input.nextInt(); BigInteger s = BigInteger.valueOf(1); for ( int i = 1;i<=a ; i++) { s = s.multiply(BigInteger.valueOf(i)); } System.out.println(s); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。