题目的链接为:
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,再判断此位是否有进位。
从后位遍历到第一位,即可以得到最终结果。
代码如下:
题目为:
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;
- }