2的N次方_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 2的N次方

2的N次方

 2012/5/5 12:44:41  passzh  程序员俱乐部  我要评论(0)
  • 摘要:题目的链接为: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
  • 标签:
题目的链接为: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;
}
  • 相关文章
发表评论
用户名: 匿名