最后一个一
题目描述
对于一个十进制的数字x,将他转化为2进制,他的2进制将由0和1组成,求里面的最后一个1在第几位
输入
第一行输入T,代表T组数据,
接下来T行,每行输入一个X。
0<T<1e7
0<X<1e9
输出
输入x的2进制中最后一个1在第几位,
不存在输出0
样例输入
3038
样例输出
021
#include<stdio.h>
#include<string.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int m=1,r,n,cnt,p,q,k;
scanf("%d",&n);
p=n;cnt=0;
while(m)
{
r=n%2;
m=n/2;
n=m;
cnt++;
}
k=0;q=1;
while(q)
{
r=p%2;
if(r==1)
break;
q=p/2;
p=q;
k++;
}
//printf("--%d--%d--\n",cnt,k);
printf("%d\n",cnt-k);
}
return 0;
}