1.链接地址:
http://bailian.openjudge.cn/practice/2809/
2.题目:
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 任意给定一个正整数N(N<=100),计算2的N次方的值。
- 输入
- 输入只有一个正整数N。
- 输出
- 输出2的N次方的值。
- 样例输入
5- 样例输出
32- 提示
- 高精度计算
3.思路:
数据较弱,直接利用高精度乘法计算即可
4.代码:
1 #include <string> 2 #include <cstdio> 3 #include <vector> 4 #include <iostream> 5 #include <algorithm> 6 7 using namespace std; 8 9 string mul(string str1,string str2) 10 { 11 vector<int> v_res(str1.size()+str2.size(),0); 12 string::size_type i,j; 13 vector<int>::size_type k,p; 14 15 reverse(str1.begin(),str1.end()); 16 reverse(str2.begin(),str2.end()); 17 for(i = 0; i != str1.size(); ++i) 18 { 19 for(j = 0; j != str2.size(); ++j) 20 { 21 v_res[i+j] += (str1[i]-'0') * (str2[j] - '0'); 22 } 23 } 24 for(k = 0; k != v_res.size() - 1; ++k) 25 { 26 v_res[k+1] += v_res[k] / 10; 27 v_res[k] = v_res[k] % 10; 28 } 29 30 for(p = v_res.size() - 1; p != -1; --p) 31 { 32 if(v_res[p] != 0) break; 33 } 34 if(p == -1) p = 0; 35 36 string s_res(p+1,'0'); 37 for(k = p; k != -1; --k) s_res[p-k] = char(v_res[k] + '0'); 38 39 40 return s_res; 41 42 } 43 44 int main() 45 { 46 int n; 47 cin>>n; 48 string res = "1"; 49 50 while(n--) 51 { 52 res = mul(res,"2"); 53 } 54 55 cout<<res<<endl; 56 57 return 0; 58 }