posts - 183,  comments - 10,  trackbacks - 0

字符串用字符数组来保存。

这里对一个大数求其阶乘,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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理