2的N次方求解-----C++

2的N次方求解,一般情况如果不超出C/C++基本数据类型的表达范围,这个问题及其容易,但是如果N的值十分的大,以致于超出基本数据类型表达范围

下面的程序正是解决2的N次方这个大数精确求解的源码

 1 #include <iostream>
 2 #include <vector>
 3 #include <fstream>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int N = 512;//2的N次方是超过基本数据类型所能表达的范围
 9 
10     vector<int> result;//使用vector来保存结果,这里可以使用char来保存
11     result.push_back(1);//首先起始为1
12     vector<int>::iterator it;//定义迭代器
13 
14     for (int i = 1; i <= N; i++)
15     {
16         for (it = result.begin(); it != result.end(); it++)//所得每一位*2
17         {
18             *it = (*it) * 2;
19         }
20         for (size_t i = 0; i < result.size(); i++)//判断每一位
21         {
22             if (result[i] > 9)//如果该为>=10
23             {
24                 if (i == result.size() - 1)//如果是最高位
25                 {
26                     result.push_back(result[i] / 10);//增加一位
27                 }
28                 else
29                 {
30                     result[i + 1] += result[i] / 10;//进位
31                 }
32                 result[i] %= 10;//进位之后本位处理
33             }
34         }
35     }
36 
37     //写入文件
38     ofstream out;
39     out.open("result.txt", ios::out | ios::trunc);
40 
41     if (!out.is_open())
42     {
43         cout << "open error";
44         return -1;
45     }
46     for (int i = result.size() - 1; i > -1; i--)//存储和自然读数顺序相反
47     {
48         out << result[i];
49         cout << result[i];
50     }
51 
52     out.close();
53     cout << endl;
54 
55     system("pause");
56     return 0;
57 }

程序运行结果:

2512=13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096

下面是win10计算器计算的结果:

 -----------------------------------------------------------------------------------------------------------------------------------------------------------

这个程序只要稍加修改即可变成阶乘大数的求法

 for (it = result.begin(); it != result.end(); it++)//所得每一位*2
 {
*it = (*it) * 2;//将2修改为i---->*it = (*it) * i;
}

 

posted @ 2017-09-18 23:39  SimonKly  阅读(8032)  评论(0编辑  收藏  举报