>572
入力はint全般なんだから、最低10^16の整数値が扱えないとだめじゃない?

>573
int bit = 0;
for(i = 31; i >=0; i--){
if( (1 << i ) & input){ printf("1"); bit = 1; }
else if( bit ){ printf("0");}
}