输入补超过1000的正整数n,输出n!=1*2*3....*n的精确结果..
样例输入:30
样例输出:265252859812191058636308480000000
1 #include "stdafx.h" 2 #include<iostream> 3 #include<string> 4 using namespace std; 5 const int maxn=3000; 6 int f[maxn]; 7 int _tmain(int argc, _TCHAR* argv[]) 8 { 9 int i ,j,n; 10 cin>>n; 11 f[0]=1; 12 for(int k = 1;k!=maxn;k++) 13 { 14 f[k]=0; 15 } 16 for(i= 2;i<=n;i++) 17 { 18 int c= 0; 19 for(j = 0;j<maxn;j++) 20 { 21 int s =f[j]*i+c; 22 f[j] = s%10; 23 c=s/10; 24 } 25 } 26 for(j= maxn-1;j>=0;j--)if(f[j]) break; 27 for(i = j;i>=0;i--) cout<<f[i]; 28 29 return 0; 30 }
其实就是模拟手算的一个过程.将每次乘得的结果与n相乘.求出结果.个位留下.除以10得到进位.到高位上去...