N的階乘,通過數組的方式計算N的階乘,防止由于計算結果太大導致溢出!
1 #include <iostream>
2 using namespace std;
3
4 void Function(int n)
5 {
6 int Length =n*(n+1)/2;
7
8 int *result =new int[Length];
9 memset(result,0,Length);
10
11 result[0]=1;
12 int number_count =1;
13 int number_carry =0;
14 int number_temp = 0;
15
16 for(int i= 1; i<=n; i++)
17 {
18 for(int j=0;j<number_count; j++)
19 {
20 number_temp =result[j]*i + number_carry;
21 result[j] = number_temp % 10;
22 number_carry = (int)(number_temp/10);
23 }
24 while(number_carry)
25 {
26 result[number_count] =(number_carry % 10);
27 number_carry = (int)(number_carry / 10);
28 number_count++;
29 }
30 }
31
32 for(int i=number_count-1; i>=0;--i)
33 {
34 cout<<result[i];
35 }
36
37 cout<<endl;
38 delete[] result;
39 }
40
41 int main()
42 {
43 unsigned int n;
44 while(cin>>n&&n!=0)
45 {
46 Function(n);
47 }
48
49 return 0;
50 }
N的階乘
1 #include <iostream>
2 using namespace std;
3
4 void Function(int n)
5 {
6 int Length =n*(n+1)/2;
7
8 int *result =new int[Length];
9 memset(result,0,Length);
10
11 result[0]=1;
12 int number_count =1;
13 int number_carry =0;
14 int number_temp = 0;
15
16 for(int i= 1; i<=n; i++)
17 {
18 for(int j=0;j<number_count; j++)
19 {
20 number_temp =result[j]*i + number_carry;
21 result[j] = number_temp % 10;
22 number_carry = (int)(number_temp/10);
23 }
24 while(number_carry)
25 {
26 result[number_count] =(number_carry % 10);
27 number_carry = (int)(number_carry / 10);
28 number_count++;
29 }
30 }
31
32 for(int i=number_count-1; i>=0;--i)
33 {
34 cout<<result[i];
35 }
36
37 cout<<endl;
38 delete[] result;
39 }
40
41 int main()
42 {
43 unsigned int n;
44 while(cin>>n&&n!=0)
45 {
46 Function(n);
47 }
48
49 return 0;
50 }
N的階乘