OpenJudge 2809 计算2的N次方

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 }

 

你可能感兴趣的:(open)