ACM 2的N次方

本文介绍了一种使用数组实现的高精度计算方法来求解2的N次方的问题。通过循环迭代更新数组中的每一位,实现了对大整数的精确运算。文章提供了完整的C++代码示例,并分享了从初次尝试到解决问题的心路历程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总时间限制:

1000ms

内存限制:

65536kB

描述

任意给定一个正整数N(N<=100),计算2的n次方的值。

输入

输入一个正整数N。

输出

输出2的N次方的值。

提示

高精度计算

初看这道题时感觉很简单,大脑一根筋的直接一个循环代码提交上去,当时返回wrong answer时还很郁闷,BBB~~~~之后我感觉这题目没有想象中的那么简单,唐唐一个ACM怎么可能只出一个循环题呢。WA的原因很简单,题目要求的是要高精度计算。

直接调用sizeof()函数,可看到int ,long都占有4个字节,double占8个字节

要获取double,float,int型变量对应的能表示的最大值最小值非常简单,C++内已经定义好了它们,分别为DLB_MAX,DLB_MIN,FLT_MAX,FLT_MIN,INT_MAX,INT_MIN。

 

 

我个人认为不是double类型存不下2的100次方,而是精度不够,2的100次方才31位,相比较double的308位可以算是小巫见大巫了。

废话不多说,直接上代码:

 

#include<iostream>
using namespace std;
int main(){
	const int x = 2;//计算x的n次方
	int a[1000] = { 0 };
	int b = 0;//用来计算向前  进的数字
	a[999] = 1;
	int n;
	cin >> n;
	for (int i = 0; i<n; i++){
		int j = 999;
		while (j >= 0){
			int k = a[j] * x + b;
			a[j] = k % 10;
			b = k / 10;
			j--;
		}
	}
	int s;
	for (s = 0; s<1000; s++){
		if (a[s] != 0)
			break;
	}
	for (; s<1000; s++){
		cout << a[s];
	}


	return 0;

}


代码测试结果:

 

  这是我的第一篇文章,肯定有许多不完善的地方,如有错误,欢迎指正。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值