两道笔试题,大家帮忙看一下...

darkwalkertt 2008-10-29 10:23:45
1.已知x,不用+,-,*,/符号,计算出x+1的值;
2.检验一个整数是否为2的n次方数,要求用一行代码,而且不能使用循环语句。
笔试的时候没想出来...
...全文
544 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
cba_v 2008-10-29
  • 打赏
  • 举报
回复
2, x&(x-1)? false:true // 只有1位是1,其他位都为0的数为2的n次方。
不是很清楚 原理 能否讲解一下
太乙 2008-10-29
  • 打赏
  • 举报
回复


1.已知x,不用+,-,*,/符号,计算出x+1的值;

答:12L就可以达到效果

2.检验一个整数是否为2的n次方数,要求用一行代码,而且不能使用循环语句。

答:4L
kiffa 2008-10-29
  • 打赏
  • 举报
回复
1 取巧的方法真多:
int x = 5;
string s(x, 'a');
s.push_back('a');
cout << s.size() << endl;




xmczr 2008-10-29
  • 打赏
  • 举报
回复
1,用以为的思想比较好处理,加1就是从最后一个二进制的数开始,直到找到第一个0,前面全是的重置为0,将找到的第一个0设置为1

2,if(x&(x-1))成立就不是2的n次方,不成立就是
once_and_again 2008-10-29
  • 打赏
  • 举报
回复
2 移位可以吗?
liumingrong 2008-10-29
  • 打赏
  • 举报
回复
int add1(int a)
{
if( (a| 1) > a)
return (a |= 1);
else
{
int i = 1;
while( (a|i) == a)
i = i << 1;
a = a | i;
int j = i;
while(i > 1)
{
a = a >> 1;
i = i >> 1;
}
while( i != j)
{
a = a << 1;
i = i << 1;
}
return a;
}
}
树先生 2008-10-29
  • 打赏
  • 举报
回复
1. int add(int i)
{
char (*p)[2] = (char (*)[2])i;
return (int)&((*p)[1]);
}

2. 4楼很好
yyyapple 2008-10-29
  • 打赏
  • 举报
回复
1.假设是整数
int Add(int x)
{
int n = x, b =1;
while( (n & b)) {
n = n& (~b);
b = b<<1;
}
return (n | b);
}

2. x == 1<<n
cyj626 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kiffa 的回复:]
2, x&(x-1)? false:true // 只有1位是1,其他位都为0的数为2的n次方。
[/Quote]同意
kiffa 2008-10-29
  • 打赏
  • 举报
回复
我只翻过编码的奥秘。。。
kiffa 2008-10-29
  • 打赏
  • 举报
回复
1, 需要限定x为常量表达式,也不太好。
const int x = 3;
enmu K{i = x, j};
cout << j << endl;
wryse 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kiffa 的回复:]
2, x&(x-1)? false:true // 只有1位是1,其他位都为0的数为2的n次方。
[/Quote]
正解,x&(x-1)一般都用来消去最后一位1……
yyyapple 2008-10-29
  • 打赏
  • 举报
回复
去看看编程的奥秘
kiffa 2008-10-29
  • 打赏
  • 举报
回复
1,不是太好的方法,再想想别的。
int x = 3;
char *p = (char*)x;
cout << (int)&p[1] << endl;
OenAuth.Core 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kiffa 的回复:]
2, x&(x-1)? false:true // 只有1位是1,其他位都为0的数为2的n次方。
[/Quote]

正解,想法不错
kiffa 2008-10-29
  • 打赏
  • 举报
回复
2, x&(x-1)? false:true // 只有1位是1,其他位都为0的数为2的n次方。
darkwalkertt 2008-10-29
  • 打赏
  • 举报
回复
语句中不能出现那四种符号...
位操作考虑过了,想到了按位异或之后再处理一下,具体怎么弄还没搞出来。
树先生 2008-10-29
  • 打赏
  • 举报
回复
1.x++ 不可以吗
2.应该可以用位操作解决
树先生 2008-10-29
  • 打赏
  • 举报
回复
mark再看
C_Plus87 2008-10-29
  • 打赏
  • 举报
回复
第二题
i为该整数
i >> n == 1 ? cout<<"Yes" : cout<<"No";
加载更多回复(28)

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧