`

2的N次方

c++ 
阅读更多
题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1009
题目为:
2的N次方
时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:999            测试通过:500

描述


编程精确计算2的N次方。(N是介于100和1000之间的整数)。


输入


正整数N (100≤N≤1000)


输出


2的N次方


样例输入

200

样例输出

1606938044258990275541962092341162602522202993782792835301376

很明显,这个不能直接算...要用数组模拟计算和进位...是属于大数处理题目的一种。
我们用arr这个长度为2000的数组来存储结果。
对于每次乘2,从最后一位开始,乘2,如果有进位,那么此位的值为乘积%10;前面的数,乘2后,判断后面是否有进位,有进位那么加1,再判断此位是否有进位。
从后位遍历到第一位,即可以得到最终结果。
代码如下:
#include<iostream>
#define MAXNUM 2000
using namespace std;
int arr[MAXNUM];
int main()
{
  int n,index;
  cin>>n;
  //大数乘法
  index=0;
  for(int i=0;i<MAXNUM;i++)
  {
     arr[i]=0; 
  } 
  arr[0]=2;
  for(int i=1;i<n;i++)
  {
     int jinwei=0;
     for(int j=0;j<=index;j++)
     {
         int temp=1;
         if(j==0)
         {
              temp=arr[j]*2;
              if(temp>=10)
              {
                  jinwei=1;
              }
         } 
         else
         {
              temp=arr[j]*2;
              if(jinwei==1)
              {
                 temp=temp+1; 
              }
              if(temp>=10)
              {
                  jinwei=1;
              }
              else
              {
                  jinwei=0; 
              }
         }
         arr[j]=temp%10;
     }
     if(jinwei==1)
     {
          index++;
          arr[index]=1;
     }
  } 
  for(int i=index;i>=0;i--)
  {
     cout<<arr[i]; 
  }
  cout<<endl;
  
  system("pause"); 
  return 0;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics