ACM 2的N次方

总时间限制:

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;

}


代码测试结果:

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

原文地址:https://www.cnblogs.com/Zhoust/p/14994612.html