求n!(高精度问题)
1 #include <iostream> 2 #include <stdio.h> 3 #define MAX 10000 4 using namespace std; 5 void Mul(int n) 6 { 7 int i=0,j=0; 8 int s; //乘积 9 int c=0; //进位 10 //存放大整数a 11 int arr[MAX]={0}; 12 arr[0]=1; 13 14 for(i=2;i<=n;i++) 15 { 16 for(j=0;j<MAX;j++) 17 { 18 s=arr[j]*i+c; 19 arr[j]=s%10; 20 c=s/10; //进位 21 } 22 } 23 24 for(i=MAX-1;i>=0;i--) 25 { 26 //遇到不是0,开始输出 27 if(arr[i]) 28 break; 29 } 30 for(j=i;j>=0;j--) 31 { 32 //倒序输出 33 printf("%d",arr[j]); 34 } 35 printf("\n"); 36 } 37 int main(int argc, char *argv[]) { 38 Mul(500); 39 return 0; 40 }
算法思路: