c语言 lowest bit 程序求解释
答案:2 悬赏:80 手机版
解决时间 2021-11-30 10:30
- 提问者网友:泪痣哥哥
- 2021-11-29 09:52
c语言 lowest bit 程序求解释
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-11-29 11:10
#include
#include
int main()
{
int N;
while(scanf("%d",&N)) //输入N的值
{
if(N==0) //当输入的N为0的时候退出循环
break;
int t=0;
while(N%2==0) //N除以2取余数,余数为0时循环
{
t++;
N=N/2; //N除以2取商
}
printf("%d
",(int)pow(2,t));//打印出2的t次方
}
return 0;
}
#include
int main()
{
int N;
while(scanf("%d",&N)) //输入N的值
{
if(N==0) //当输入的N为0的时候退出循环
break;
int t=0;
while(N%2==0) //N除以2取余数,余数为0时循环
{
t++;
N=N/2; //N除以2取商
}
printf("%d
",(int)pow(2,t));//打印出2的t次方
}
return 0;
}
全部回答
- 1楼网友:迟山
- 2021-11-29 11:22
其实理解这道题的本质就可以理解算法了。
写成二进制后,他要求的就是从右向左第一个1的位置。而在二进制里,也就是2的(i-1)次方,i就是1的位置。
所以看程序,大循环是循环处理数字。
如果N==0那说明程序要结束,跳出while。
否则,用t表示1的位置,如果尾数不是1就除2,相当于右移。最终t获得1的位置后,pow(2,t)求出值
写成二进制后,他要求的就是从右向左第一个1的位置。而在二进制里,也就是2的(i-1)次方,i就是1的位置。
所以看程序,大循环是循环处理数字。
如果N==0那说明程序要结束,跳出while。
否则,用t表示1的位置,如果尾数不是1就除2,相当于右移。最终t获得1的位置后,pow(2,t)求出值
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯