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;
}