字符串用字符数组来保存。
这里对一个大数求其阶乘,N!
N! 的结果很大,需要字符数组保持,但是我们认定 N 没有大到需要字符数组存储的地步。
由于这个原因,我们是对结果用字符数组存储,而对 N 还是保持到 int 中。
首先对 N 从 0 到 N 遍历,对保持结果的字符数组 ret 中的每位进行逐位相乘,还是 int 型乘法。从左到右,从低位到高位进行运算,注意进位。对小于 N 的每个数,对 ret 中的每个元素相乘,进位。记录 ret 中的元素个数。
然后对 ret 进行逆转,以使高位放在最左边,并且将实际数字转换成字符以输出显示。
1 #include <iostream>
2 using namespace std;
3
4 char* bigFactorial(char* ret, int n)
5 {
6 ret[0] = 1;
7 int len = 1, i, j, t, c = 0;
8 for (i = 2; i <= n; ++i)
9 {
10 for (j = 0; j < len; ++j)
11 {
12 t = ret[j] * i + c;
13 ret[j] = t % 10;
14 c = t / 10;
15 }
16 while (c != 0)
17 {
18 ret[len] = c % 10;
19 c /= 10;
20 ++len;
21 }
22 }
23 for (int i = 0; i < len / 2; ++i)
24 {
25 ret[i] ^= ret[len - i - 1];
26 ret[len - i - 1] ^= ret[i];
27 ret[i] ^= ret[len - i - 1];
28 }
29 ret[len] = '\0';
30 for (i = 0; i < len; ++i)
31 {
32 ret[i] += '0';
33 }
34 return ret;
35 }
36
37 int main()
38 {
39 int n;
40 char result[1000];
41 while (cin >> n)
42 {
43 cout << bigFactorial(result, n) << endl;
44 }
45 return 0;
46 }
posted on 2011-05-18 19:36
unixfy 阅读(191)
评论(0) 编辑 收藏 引用