HDU 1042 N!(高精度计算阶乘)
生活随笔
收集整理的這篇文章主要介紹了
HDU 1042 N!(高精度计算阶乘)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?
????????? N!
Time Limit: 10000/5000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 34687????Accepted Submission(s): 9711
?
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;//忽略前導0for(i=count-1;i>=0;i--)cout<<a[i];cout<<endl;}return 0; }?
?
轉載于:https://www.cnblogs.com/Su-Blog/archive/2012/08/27/2659172.html
總結
以上是生活随笔為你收集整理的HDU 1042 N!(高精度计算阶乘)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell Notes(1)
- 下一篇: HDU ACM 1181 变形课 (广搜