• 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;
    
    }


    代码测试结果:

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

  • 相关阅读:
    C语言:线程同步之信号量(sem_init,sem_post,sem_wait)
    SVN使用 -work
    atomic c++ y原子变量 替换锁代码
    原子变量
    perf
    内存泄露检测工具对比
    valgrind ----直接使用参数
    堆内存分析---特别棒
    调不尽的内存泄漏,用不完的 Valgrind(转)
    静态库动态库制作方法
  • 原文地址:https://www.cnblogs.com/Zhoust/p/14994612.html
Copyright © 2020-2023  润新知