首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

二的N次方

2012-09-01 
2的N次方题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&methodshowdetail&id1009题

2的N次方
题目的链接为: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 2000using 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;}

热点排行