HDU 1042 N! 高精度乘法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1042 N! 高精度乘法相关的知识,希望对你有一定的参考价值。
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
题目意思很简单,就是让你求N的阶乘,但是N的范围有10000,所以要用高精度,但是10000的时候枚举乘上去时间不够,还好数据没有10000的。
我的代码应该是可以优化的。
代码如下:
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 int temp,n,a,k,ans[110000]; 7 int main(){ 8 while(scanf("%d",&n)!=EOF) 9 { 10 int count=1; 11 memset(ans,0,sizeof(ans)); 12 ans[0]=1; 13 14 for (int i=1;i<=n;++i) 15 { k=0; 16 for(int j=0;j<count;++j) 17 { 18 temp=ans[j]*i+k; 19 ans[j]=temp%10; 20 k=temp/10; 21 22 23 }while(k){ 24 ans[count++]=k%10; 25 k/=10; 26 } 27 } 28 for (int i=100000;i>=0;--i) 29 if (ans[i]) 30 { 31 count=i; 32 break; 33 } 34 for(int i=count;i>=1;--i) 35 { 36 printf("%d",ans[i]); 37 } 38 printf("%d\n",ans[0]); 39 } 40 41 return 0; 42 }
以上是关于HDU 1042 N! 高精度乘法的主要内容,如果未能解决你的问题,请参考以下文章