题目的链接为:
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;
}
分享到:
相关推荐
自己做的C++小程序,仅供参考,2的N次方2的N次方2的N次方2的N次方2的N次方
通过汇编语言实现2的n次方,作业,调试结果正确
1170:计算2的N次方 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 10500 通过数: 5410 【题目描述】 任意给定一个正整数N(N≤100),计算2的n次方的值。 【输入】 输入一个正整数N。 【输出】 输出2的N次方的值...
计算2的n次方
2的N次方的计算方法。希望对需要的你有帮助哦~
编程精确计算2的N次方。(N是介于100和1000之间的整数)。
2的n次方 单链表操作 求2的任何一个整数的n次方,
分别用分治法、蛮力法、减治法实现了a的n次方,并进行了三种算法的时间性能比较,测试数据可以用1的n次方
用C语言来定义一个宏用来判断一个数是否为2的N次方。并附有测试程序
一个用于计算x的n次方的算法,效率比较高
计算2的N次方的CMD命令 计算2的N次方的CMD命令
类的编写和使用三个案例 :1 判断三角形并求面积 2 求N次方幂的类 3 人民币转换大写
//计算2的n次方,n > 0。 const char *power2(unsigned n); //计算斐波那契数列第n项,n > 0。 const char * fib(unsigned n); //计算n的阶乘,n > 0。 const char * fac(unsigned n);
2的n次方
printf(" 3.x的n次方的实现\n"); printf(" 4.退出\n"); scanf("%d",&option); if(option==4) { printf("您是否确定要退出? 1.是的,我已经想好了! 2.不,我还想回菜单看看!\n"); scanf("%d",&m); ...
基于JESD204B的高速采集模块设计与实现,论文分享给需要的人
信息学奥赛一本通 代码 1170:计算2的n次方
非常好用的一款软件 小学生都会用
昨天去面试时,面试官问了一道面试题,说如何判断一个数是不是2的n次方幂,我当时不知道2的n次方幂是什么(糗大发了),还好给我解释了一下。最后回家上网查查资料,整理了一下方法。 方法一 如何判断一个数是否是2...