长假将尽,来几道小题乐乐。

BlueSky2008 2003-10-07 12:13:19
1。判断一个整数是不是完全平方数。
2。判断一个整数是不是2的幂。
3。求一个32位整数开头有几个连续的0。
4。求m,n的最小公倍数。

要求:用c写,每个问题代码小于等于3行。不准用库函数。
答案旧贴找,找不着就不要怪我了:)
...全文
55 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueSky2008 2003-10-15
  • 打赏
  • 举报
回复
总结一下:
1。判断一个整数是不是完全平方数。
bool check(int n)
{ int i;
for(i=1;n>0;i+=2)n-=i;
return n==0;
}

2。判断一个整数是不是2的幂。
bool ispow2(int n){
return !(n&(n-1));
}

3。求一个32位整数开头有几个连续的0。
int check(int n)
{int i;
for(i=0;n;i++)n>>=1;
return 32-i;}

4。求m,n的最小公倍数。
lcd(int int m){
for(int t=m;t%n;t+=m);
return t;
}

再加一个:
5。求一个无符号32位整数中有几个位是0。
numof0(unsigned int x){
for(int i=0; x; x &= x-1,i++);
return 32-i;
}
LeeMaRS 2003-10-09
  • 打赏
  • 举报
回复
to BlueSky2008 :
sorry..看得看快, 看走眼了, 另补一个函数就行.
int LCD(int m, int n)
{
return m * n / GCD(m, n);
}

^_^
kbsoft 2003-10-08
  • 打赏
  • 举报
回复
hehe,我的是求log(2)常数的,贴错了
NowCan 2003-10-07
  • 打赏
  • 举报
回复
是啊,改成字符数。
BlueSky2008 2003-10-07
  • 打赏
  • 举报
回复
to zzwu:我说的一行就是通常意义上的一行,不是胡子连着眉毛的一行。
其实每个问题核心代码只要一行就够了,加上函数声明,变量声明,返回语句,括号就放宽到5行吧。

像LeeMaRS的
2.
bool isValid(int m){
int t;
for(t = 1; t < m; t = t << 1);
return (t == m);
}

liuqing531(Sober) 的
1.
for(i=0; i<0x0100; i++)
if (num == i * i) return ture;
return false;

这样的就行了。(当然还有比这更好的)

to kbsoft:你那个程序求得是什么啊?
to LeeMarS: 4是求最小公倍数。
mmmcd 2003-10-07
  • 打赏
  • 举报
回复
1:
bool check(int n)
{int i;
for(i=1;n>0;i+=2)n-=i;
return n==0;}

3:
int check(int n)
{int i;
for(i=0;n;i++)n>>=1;
return 32-i;}

zzwu 2003-10-07
  • 打赏
  • 举报
回复
以行数为标志,恐怕难统计,因为几行可以合并写在一起,如:

for(i=0; i<0x0100; i++)
if (num == i * i) return ture;
return false;

可写成
for(i=0; i<0x0100; i++) if (num == i * i) return ture; return false;
ZhangYv 2003-10-07
  • 打赏
  • 举报
回复
好象旧贴里都有 :>
liuqing531 2003-10-07
  • 打赏
  • 举报
回复
1.
for(i=0; i<0x0100; i++)
if (num == i * i) return ture;
return false;
liuqing531 2003-10-07
  • 打赏
  • 举报
回复
3.
同2的思路。
左移与0x8000取或
liuqing531 2003-10-07
  • 打赏
  • 举报
回复
2.
for(int k=0; i != 0; i >>= 1) k += (i & 0x01);
return k == 1 ? ture : false
LeeMaRS 2003-10-07
  • 打赏
  • 举报
回复
2.
bool isValid(int m){
int t;
for(t = 1; t < m; t = t << 1);
return (t == m);
}
LeeMaRS 2003-10-07
  • 打赏
  • 举报
回复
3行指的应该是程序部分吧, 函数声明这些应该不算, 不然就XXOO了.
LeeMaRS 2003-10-07
  • 打赏
  • 举报
回复
4.
int GCD(int m, int n){
while (0 != n) {int t = m; m = n; n = t % n;}
return m;
}
kbsoft 2003-10-07
  • 打赏
  • 举报
回复
2.
main(){int a=1000,b=0,c=2658,d=75,f[2659],n=800,k;
for(;b<c;f[b++]=d,d=-d);
for(;n--;d+=*f*a,printf("%.3d",d/a),*f=d%a)
for(d=0,k=c;--k;d/=b,d*=k)f[k]=(d+=f[k]*a)%(b=8*k+4);}











555555,有4行

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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