二进制的前导的零问题

计算机内部用二进制来表达所有的值。一个十进制的数字,比如24,在一个32位的计算机内部被表达为00000000000000000000000000011000。可以看到,从左边数过来,在第一个1之前,有27个0。我们把这些0称作前导的零。
现在,你的任务是写一个程序,输入一个整数,输出在32位表达下它前导的零的个数。
#include <stdio.h>
2
#include <math.h>
3
int main()
4
{
5
int n;
6
scanf("%d",n);
7
do{
8
float a;
9
a=sqrt(n);
10
if((int)a==a){
11
printf("%d",31-a);
12
break;
13
}
14
n--;
15
}while(n>0);
16
return 0;
17
}

它提示说段错误,请问我哪里做错了

scanf(里面要&n)

输出printf("%f0.0",a);