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