社区
C语言
帖子详情
问一个不是太难的问题
anggogo
2003-10-20 02:52:57
如何得到大于或小于任意一个数a的附近有2的n次幂呢?(两个函数)
比如说,输入15和2,可以判断出大于15的数16是2的4次方
再或者比如,输入67,可以判断出小于67的数64是2的6次方
自己考虑了半天,发现自己只能想到一些非常愚蠢的算法,比如循环算出2的次方,然后当该数大于或小于a的时候就返回。如果a非常大,那简直无法接受。
...全文
53
8
打赏
收藏
问一个不是太难的问题
如何得到大于或小于任意一个数a的附近有2的n次幂呢?(两个函数) 比如说,输入15和2,可以判断出大于15的数16是2的4次方 再或者比如,输入67,可以判断出小于67的数64是2的6次方 自己考虑了半天,发现自己只能想到一些非常愚蠢的算法,比如循环算出2的次方,然后当该数大于或小于a的时候就返回。如果a非常大,那简直无法接受。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
anggogo
2003-10-21
打赏
举报
回复
大家看看我自己写的这两个函数又怎样呢?
前面的大哥写的我研究一下再给分
bool ComputeSmallestPowerOf2(double lower, double upper, long &result)
{
if (lower==1)
{
result=1;
return true;
}
long power=0;
int loop=0;
loop =(int)ceil(sqrt(lower));
do {
power = (long)pow(2.0,loop);
if (power>=lower && power<=upper)
{
result = power;
return true;
} else {
loop++;
}
} while (loop>0 || power>=upper);
return false;
}
bool ComputeLargestPowerOf2(double lower, double upper, long &result)
{
long power=0;
int loop=0;
loop =(int)floor(sqrt(upper));
do {
power = (long)pow(2.0,loop);
if (power>=lower && power<=upper)
{
if (power>pow(16.0,(double)sizeof(long)))
return false;
else
{
result = power;
return true;
}
} else {
loop--;
}
} while (loop>0 || power<=lower);
return false;
}
kfjin
2003-10-20
打赏
举报
回复
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
int cnt=0, a;
cout << " input an INT " << endl;//只考虑正数,只说明一个算法。
cin >> a ;
do
{
a = int( a / 2 );
cnt++;
}while( a != 1 );
cout << pow( 2, cnt ) << endl;
}
Liulingbing
2003-10-20
打赏
举报
回复
#include <iostream>
#include <iomanip>
using namespace std;
int bpowerh(int n){
if(n < 0) return -1;
for(int i = 0; i < 32; i ++){
if(n & (0x8000 >> i)){
int tmp = 0x8000 >> (i-1);
for(; !(n & 0x8000 >> ++i) && i < 32; );
if(i < 32) n = tmp;
return n;
}
}
}
int bpowerl(int n){
if(n < 0) return -1;
for(int i = 0; i < 32; i ++){
if(n & (0x8000 >> i)){
int tmp = 0x8000 >> i;
for(; !(n & 0x8000 >> ++i) && i < 32; );
if(i < 32) n = tmp;
return n;
}
}
}
void main()
{
cout << bpowerh(96) << ' ' << bpowerl(96) << endl;
cout << bpowerh(128) << ' ' << bpowerl(128) << endl;
}
ningzhiyu
2003-10-20
打赏
举报
回复
若x%2==0,则返回x; //10%2=0
arfi()'s method is good.
SolidRabbit
2003-10-20
打赏
举报
回复
对,用二进制比较简单。
jhyu
2003-10-20
打赏
举报
回复
移位操作,如楼上两位所述
蝎子i软件
2003-10-20
打赏
举报
回复
设输入的数为x,
若x%2==0,则返回x;
否则,算术右移x,并记录次数y
直到x==0,则2<<y为大于x的数;
直到x==1,则2<<y为小于x的数.
未经验证,仅供参考!
arfi
2003-10-20
打赏
举报
回复
15写成2进制为0000 1111,所以比它大且为2的幂的数为0001 0000(16),比它小且为2的幂的数为0000 1000(8)。
67写成2进制为0100 0011,所以比它大且为2的幂的数为1000 0000(128),比它小且为2的幂的数为0100 0000(64)。
所以你只要确定了值为1的最高比特位,相邻的两个数也就知道了。
2024软考信息系统项目管理师_项目管理(上) (第四版新版)
参加工作后,我们没有太多的时间投入到信息系统项目管理师的备考中,教程太厚、真题
太难
,怎样花少的时间顺利通过软考考试是每个人都在探索的
问
题
。看视频,小任老师帮你把握考试重点,用短的时间,让你学到应该掌握...
挑战10个最难的Java面试题(附答案)【上】
你可能知道这些棘手的 Java
问
题
的答案,或者觉得这些不足以挑战你的 Java 知识,但这些
问
题
都是容易在各种 Java 面试中被
问
到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。 1 为什么等待和通知是在...
清华大一 Python 作业
太难
上热榜
就直接要求“手撸”
一个
AI 算法! 就这样,清华再一次因为难,冲上了知乎热榜。 这作业有多难? 先来聊聊这个作业的背景。 根据清华计算机系 00 后本科生、知乎用户“孙恒”的介绍: 这门 Python 课,是在...
“我
太难
了!” 2020年程序员如何才能不再难!
王兴曾说:“2019年可能会是过去十年里最差的一年,却是未来十年里最好的一年”。谁曾想,一语成谶。2020年程序员究竟该如何看待自己的职业生涯...
NP
问
题
真的很难理解
有一则程序员界的笑话,就是有一哥们去google面试的时候被
问
到
一个
问
题
是:在什么情况下P=NP,然后他的回答是”当N=1的时候”。这是我第一次听说P=NP
问
题
,大概是在临近毕业为找工作而准备的时候。 这几天科技类...
C语言
69,369
社区成员
243,081
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章