vb2的n次方大于n100时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&
int main(){
const int x = 2;//计算x的n次方
int a[1000] = { 0 };
int b = 0;//用来计算向前
a[999] = 1;
for (int i = 0; i&n; i++){
int j = 999;
while (j &= 0){
int k = a[j] * x +
a[j] = k % 10;
b = k / 10;
for (s = 0; s&1000; s++){
if (a[s] != 0)
for (; s&1000; s++){
cout && a[s];
代码测试结果:
& 这是我的第一篇文章,肯定有许多不完善的地方,如有错误,欢迎指正。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:396次
排名:千里之外高考物理第一次调研测试试题_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
高考物理第一次调研测试试题
上传于||暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Matlab上机练习二答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Matlab上机练习二答案
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢c语言(9)
对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。&
void judge(int n)&
while(!(n % 2))&
n = n / 2;
if(n == 1)
printf(&yes!\n);
printf(&NO!\n&);
不过上面的方法并不是较好的方法,其实还有更为简洁高效的方法&
一个整数,若是2的n次方,有没有想过对这个整数的2进制进行考虑,比如12,它的二进制为:1100
32 100000&
从上面的举例我们发现,凡是2的N次方的整数,其二进制码只有一个1。&
假设A为要证明的整数,B等于A-1,我们假设A为2的N次方数,那么A&B = 0,这很好证明。那是不是满足A&B = 0就能证明A是2的N次方数呢?&
假设一个数的二进制为0000(这里为int型:两个字节),那这个数减去1则变为1111。我们知道,在计算机中,数都是以其二进制的补码放置的,最高位为1代表负数,最高位为0代表正数。上面两个数中,&
0000为负数,1111为正数,这两个数相与为0,但0000并不是2的N次方(2的N次方为正数)。&
因此,倘若一个数为2的N次方,那么该数应满足大于0且该数和该数减一后的值相与等于0时才为2的N次方。
void judge(int n)&
if((n & 0) && (n & (n -1) ==0))&
printf(“Yes!\n”);&
printf(“NO!\n”);&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:12075次
积分:1052
积分:1052
排名:千里之外
原创:92篇
转载:21篇
(20)(29)(30)(23)(10)(2)

我要回帖

更多关于 e的x次方大于ex 的文章

 

随机推荐