c++语言计算2的n次方,2的N次方

c++语言计算2的n次方,2的N次方题目的链接为 http acm njupt edu cn acmhome problemdetai do amp method showdetail amp id 1009 题目为 2 的 N 次方时间限制 普通 Java 1000MS 3000MS 运行内存限制 65536KByte 总提交 999 测试通过 500 描述编程精确计算 2 的 N 次方 N 是介于 1

题目的链接为: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

样例输出

很明显,这个不能直接算…要用数组模拟计算和进位…是属于大数处理题目的一种。

我们用arr这个长度为2000的数组来存储结果。

对于每次乘2,从最后一位开始,乘2,如果有进位,那么此位的值为乘积%10;前面的数,乘2后,判断后面是否有进位,有进位那么加1,再判断此位是否有进位。

从后位遍历到第一位,即可以得到最终结果。

代码如下:

#include

#define MAXNUM 2000

using namespace std;

int arr[MAXNUM];

int main()

{

int n,index;

cin>>n;

//大数乘法

index=0;

for(int i=0;i

{

arr[i]=0;

}

arr[0]=2;

for(int i=1;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<

}

cout<

system(“pause”);

return 0;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233063.html原文链接:https://javaforall.net

(0)
上一篇 2025年8月20日 下午3:01
下一篇 2025年8月20日 下午3:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号