键盘输入一个十进制正整数,求出其二进制值, 本题不允许使用数组,也不允许使用递归
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
int n;
while(scanf("%d",&n)!=EOF)
{
int t=n,i;
int cas1=0,cas2=0;
while(t)//计算最大的2的几次方
{
t/=2;
cas1++;
}
cas1-=1;
n-=pow(2,cas1);//剩余的数是多大
printf("1");//先把开头的1打出来
if(n==0)//当数刚好是2的次方直接打出剩下的0
{
for (i=1;i<=cas1;i++)
printf("0");
printf("\n");
continue;
}
while(n)
{
cas2=0;
t=n;
while(t)//计算接下来的数最大2的次方是多少
{
t/=2;
cas2++;
}
for (i=cas1;i>cas2;i--)
printf("0");//1和1之间有几个0
cas1=cas2-1;
printf("1");
n-=pow(2,cas2-1);
}
for (i=1;i<cas2;i++)
printf("0");
printf("\n");
}
return 0;
}
/*试数法
**比如说100,最大是2^6输出1,其次2^5,这里也是输出一,再后来
**就是2^2而对于2^4,3这里都要输出0,因为2^6+2^5=96+2^4>n(100)
**
*/
#include<stdio.h>
int main()
{
int n,m=1,sum,i;
scanf("%d",&n);
for(i=0;m<n/2+1;i++)
m=m*2;
sum=m;
printf("1");
for(;i>0;i--)
{
m=m/2;
sum=sum+m;
if(sum<=n)
printf("1");
else
{
printf("0");
sum=sum-m;
}
}
printf("\n");
return 0;
}