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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM