社区
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非常大,那简直无法接受。
...全文
51
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的最高比特位,相邻的两个数也就知道了。
挑战10个最难的Java面试题(附答案)【上】
这是收集的10个最棘手的Java面试
问
题
列表。这些
问
题
主要来自 Java 核心部分 ,不涉及 Java EE 相关
问
题
。你可能知道这些棘手的 Java
问
题
的答案,或者觉得这些不足以挑战你的 Java 知识,但这些
问
题
都是容易在各种 Java 面试中被
问
到的,而且包括我的朋友和同事在内的许多程序员都觉得很难回答。 1 为什么等待和通知是在 Object 类而不是 Thread 中声明的?
一个
...
清华大一 Python 作业
太难
上热榜
本文转载自IT之家
太难
了!
太难
了! 清华电子系,只学 3 节 Python 课,然后…… 然后…… 就直接要求“手撸”
一个
AI 算法! 就这样,清华再一次因为难,冲上了知乎热榜。 这作业有多难? 先来聊聊这个作业的背景。 根据清华计算机系 00 后本科生、知乎用户“孙恒”的介绍: 这门 Python 课,是在清华电子系大一《计算机程序设计基础 (2)》附带的小学期中进行。 课程的时间一共是 2 周。 其中,会抽出一周的时间来上 3 节 Python 课(共 9 学时,1 学时
“我
太难
了!” 2020年程序员如何才能不再难!
王兴曾说:“2019年可能会是过去十年里最差的一年,却是未来十年里最好的一年”。谁曾想,一语成谶。2020年程序员究竟该如何看待自己的职业生涯...
NP
问
题
真的很难理解
希望通过这篇文章可以不仅让计算机相关专业的人可以看懂和区分什么是P类
问
题
什么是NP类
问
题
,更希望达到的效果是非专业人士比如学文科的朋友也可以有一定程度的理解。 有一则程序员界的笑话,就是有一哥们去google面试的时候被
问
到
一个
问
题
是:在什么情况下P=NP,然后他的回答是”当N=1的时候”。这是我第一次听说P=NP
问
题
,大概是在临近毕业为找工作而准备的时候。 这几天科技类新闻的头条都被阿...
10 个最难回答的 Java
问
题
1.为什么等待和通知是在 Object 类而不是 Thread 中声明的?
一个
棘手的 Java
问
题
,如果 Java编程语言不是你设计的,你怎么能回答这个
问
题
呢。Java编程的常识和深入了解有助于回答这种棘手的 Java 核心方面的面试
问
题
。 为什么 wait,notify 和 notifyAll 是在 Object 类中定义的而不是在 Thread 类中定义 这是有名的 Ja...
C语言
69,336
社区成员
243,078
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章