笔试题目

留狼_鏖 2008-09-25 11:07:52
前几天去一个公司参加了笔试,只记得其中的两道题目,发出来向大家请教:
1.编写一个程序,判断输入一个整数是否为2的幂;
2.编写程序,在不用"*"和"+"的情况下实现将一个数乘以8,乘以7.
int mult8(int a){

//code
}
int mult7(int a){
//code
}
第二题有个思路:将整数先转化成2进制.然后进行左移3位,然后再转化成整数...不知道这样想对不对.请各位大大帮帮忙
...全文
278 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
jintianfree 2008-09-27
  • 打赏
  • 举报
回复
学习来了俄,顺便接点分呵。楼主好运!
bitxinhai 2008-09-27
  • 打赏
  • 举报
回复
1.#include<iostream.h>
void main()
{
int a;
cout<<"Enter a num to test:"<<endl;
cin>>a;

if(a&(a-1))//使用移位的方式实现
cout<<"Not a num of pow 2!"<<endl;
else
cout<<"It's a num of pow 2!"<<endl;
}

2、
int mult8(int a){

return a<<3;//左移3位
}
int mult7(int a){
return -a + (a<<3);
}

void main()
{
int a;
cout<<"Enter a num to test:"<<endl;
cin>>a;

cout<<a<<" mul 8 = "<<mult8(a)<<endl;
cout<<a<<" mul 7 = "<<mult7(a)<<endl;
}
andylei_ok 2008-09-27
  • 打赏
  • 举报
回复
第一道题:先把数转成二进制后判定是否仅有一位为1.
第二道题:乘八是转成二进制左移三位,乘七是转成二进制左移三位,在减去一个数(原始数值)
我是做汇编的,c语言命令写不出来,只有把思路说出来了。呵呵
aaajj 2008-09-27
  • 打赏
  • 举报
回复
不错,学习了移位
zhuwanglove 2008-09-27
  • 打赏
  • 举报
回复
学习,接个分哦。
user_csc 2008-09-26
  • 打赏
  • 举报
回复
看了这两道题,一看就是二进制运算!
aozhi 2008-09-25
  • 打赏
  • 举报
回复
1
bool ispower2(int x)   
{
return !(x&(x-1)) && !x; //排除了0的情况
}


2
int mult8(int a){
switch(a&0xF0000000)
{
case 0:
return (a << 3);
case 0x80000000:
return ((a << 3)|0x80000000);
default:
printf("overflow\n");
return 0;
}

}
int mult7( int a )
{
return ( mult8( a ) - a );
}


jieao111 2008-09-25
  • 打赏
  • 举报
回复
已经解决了,接分
sc_valentine21 2008-09-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 wtl1 的帖子:]
前几天去一个公司参加了笔试,只记得其中的两道题目,发出来向大家请教:
1.编写一个程序,判断输入一个整数是否为2的幂;

int x;
判断x&(x-1),
0->是
非零->不是

2.编写程序,在不用"*"和"+"的情况下实现将一个数乘以8,乘以7.
int mult8(int a){

//code
}
int mult7(int a){
//code
}
第二题有个思路:将整数先转化成2进制.然后进行左移3位,然后再转化成整数...不知道这样想对不对.请各位大大帮帮忙
//直接左移3位就是*8,再减去原来的本身不就是*7了[/Quote]
hearoequal 2008-09-25
  • 打赏
  • 举报
回复

最好先做个符号判断
留狼_鏖 2008-09-25
  • 打赏
  • 举报
回复
谢谢了,各位大大;
TO linlan999:对于mult8(),里面的(unsigned)a会不会影响a的符号啊?
hearoequal 2008-09-25
  • 打赏
  • 举报
回复
LS我是这个意思
打字太快
没注意措辞
呵呵
linlan999 2008-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hearoequal 的回复:]
第一题 2的幂
是说2的整数次方的意思么
直接检查数的2进制 只能最高位为1就是了
第二题

int mult8( int a )
{
return (unsigned)a < <3;
}


int mult7( int a )
{
return ( mult8( a ) - a );
}
[/Quote]
只有一个1
beyondlwm 2008-09-25
  • 打赏
  • 举报
回复
1.编写一个程序,判断输入一个整数是否为2的幂;

将这个数转换为2进制,看看,是不是只有一个1.

2.编写程序,在不用"*"和"+"的情况下实现将一个数乘以8,乘以7.
int mult8(int a){

//code
}
int mult7(int a){
//code
}

二进制,左移3位 = *8

把乘以8的结果减去一个a就是乘以7了吧?
tangtang02520 2008-09-25
  • 打赏
  • 举报
回复
1.用(a&(a-1))==0 判断
2.思路正确,不过不需要转化成2进制吧

程序自己写吧,不难。
hearoequal 2008-09-25
  • 打赏
  • 举报
回复
第一题 2的幂
是说2的整数次方的意思么
直接检查数的2进制 只能最高位为1就是了
第二题

int mult8( int a )
{
return (unsigned)a<<3;
}


int mult7( int a )
{
return ( mult8( a ) - a );
}
xkyx_cn 2008-09-25
  • 打赏
  • 举报
回复

bool ispower2(int x)
{
return !(x&(x-1));
}

第一题的这个方法,不知道是不是通用的,粗略的测试了一下


int mult8(int a){
return (a << 3);
}

int mult7(int a){
return (a << 3) - a;
}

用了-,不知道能不能合格
hearoequal 2008-09-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fvflove 的回复:]
C# code
//在VS2005下通过.
//思路: 转为字符串,在后面加上000,即增加1000倍,再除以125 即乘以8
public int fvfmul8(int a)
{
string c;
c = Convert.ToString(a);
c = c.Insert(c.Length,"000");
return Convert.ToInt32(c) / 125;
}
[/Quote]

你这样我不如直接除以 0.125
你这样开销也太大了
fvflove 2008-09-25
  • 打赏
  • 举报
回复

//在VS2005下通过.
//思路: 转为字符串,在后面加上000,即增加1000倍,再除以125 即乘以8
public int fvfmul8(int a)
{
string c;
c = Convert.ToString(a);
c = c.Insert(c.Length,"000");
return Convert.ToInt32(c) / 125;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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