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;}