N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34687 Accepted Submission(s): 9711
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
Author
JGShining(極光炫影)
高精度問題:大整數乘法的應用
其核心思想就是把計算結果每一位上的數字保存到一個數組成員中,例如:
把124保存至數組中,保存結果應該是result[0] =4;result[1] =2;result[2] =1
把整個數組看成一個數字,這個數字和一個數相乘的時候,需要每一位都和這個乘數進行相乘運算還需要把前一位的進位加上。
寫法如下:int 結果 = result[x] * 乘數 + 進位;
每一位的計算結果有了,把這個結果的個位數拿出來放到這個數組元素上:result[x] = 結果%10;
接下來的工作就是計算出進位:進位 = 結果 / 10;
這樣一位一位的把整個數組計算一遍,最后可能還有進位,用同樣的方法,把進位的數值拆成單個數字,放到相應的數組元素中。最后從后往前輸出結果。
#include<iostream> #define MAX 100000 using namespace std; int main() { int n,a[MAX]; int i,j,k,count,temp; while(cin>>n) { a[0]=1; count=1; for(i=1;i<=n;i++) { k=0; for(j=0;j<count;j++) { temp=a[j]*i+k; a[j]=temp%10; k=temp/10; } while(k)//記錄進位 { a[count++]=k%10; k/=10; } } for(j=MAX-1;j>=0;j--) if(a[j]) break;//忽略前導0 for(i=count-1;i>=0;i--) cout<<a[i]; cout<<endl; } return 0; }
