zoukankan      html  css  js  c++  java
  • 2的N次方 【转】

    题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1009
    题目为:
    2的N次方
    时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
    描述
    编程精确计算2的N次方。(N是介于100和1000之间的整数)。
    输入
    正整数N (100≤N≤1000)
    输出
    2的N次方
    样例输入
    200
    样例输出
    1606938044258990275541962092341162602522202993782792835301376

    很明显,这个不能直接算...要用数组模拟计算和进位...是属于大数处理题目的一种。
    我们用arr这个长度为2000的数组来存储结果。
    对于每次乘2,从最后一位开始,乘2,如果有进位,那么此位的值为乘积%10;前面的数,乘2后,判断后面是否有进位,有进位那么加1,再判断此位是否有进位。
    从后位遍历到第一位,即可以得到最终结果。
    代码如下:

     1 #include<iostream>   
     2 #define MAXNUM 2000   
     3 using namespace std;   
     4 int arr[MAXNUM];   
     5 int main()   
     6 {   
     7   int n,index;   
     8   cin>>n;   
     9   //大数乘法   
    10   index=0;   
    11   for(int i=0;i<MAXNUM;i++)   
    12   {   
    13      arr[i]=0;    
    14   }    
    15   arr[0]=2;   
    16   for(int i=1;i<n;i++)   
    17   {   
    18      int jinwei=0;   
    19      for(int j=0;j<=index;j++)   
    20      {   
    21          int temp=1;   
    22          if(j==0)   
    23          {   
    24               temp=arr[j]*2;   
    25               if(temp>=10)   
    26               {   
    27                   jinwei=1;   
    28               }   
    29          }    
    30          else  
    31          {   
    32               temp=arr[j]*2;   
    33               if(jinwei==1)   
    34               {   
    35                  temp=temp+1;    
    36               }   
    37               if(temp>=10)   
    38               {   
    39                   jinwei=1;   
    40               }   
    41               else  
    42               {   
    43                   jinwei=0;    
    44               }   
    45          }   
    46          arr[j]=temp%10;   
    47      }   
    48      if(jinwei==1)   
    49      {   
    50           index++;   
    51           arr[index]=1;   
    52      }   
    53   }    
    54   for(int i=index;i>=0;i--)   
    55   {   
    56      cout<<arr[i];    
    57   }   
    58   cout<<endl;   
    59      
    60   system("pause");    
    61   return 0;   
    62 } 

    原文链接:http://blog.csdn.net/rongyongfeikai2/article/details/7588295

  • 相关阅读:
    vsftpd原理与搭建
    vsftpd的日志格式
    ftp内置命令
    tcp_tw_reuse、tcp_tw_recycle和tcp_timestamps
    http_code 499、500、502、503、504
    mtr命令网络诊断
    tracert——Windows路由追踪
    linux GPT分区及扩容
    Linux磁盘扩容
    linux磁盘分区、挂载
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3596941.html
Copyright © 2011-2022 走看看