int main()
{
short a[50],k;
int n=0,j,m,count=0,flag = 1;;
unsigned short i,t,p;
while(scanf("%d",&k) != EOF)
{
a[n++] = k;
}
for(i=0;i<n;i++)
{
count = 0;
flag = 1;
if(a[i]<0)
{
flag = -1;
t = a[i]*-1;
}
else
t = a[i];
for(j=0;j<16;j++)
{
p = t<<j;
m = p>>15;
if(m==0 && count == 0)
continue;
if(count == 0 && flag == -1)
printf("-");
printf("%d",m);
count++;
}
printf("\n");
}
return 0;
}
for循环或者用if判断
题目中说不超过50个数,就定义一个50个大小数组就可以了,通过循环逐个读取记录,代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n=0,j=0,k;
int arr[50],t;
char buf[16];
//读入n个数
while(scanf("%d",&arr[n]) != EOF) n++;
for (i=0;i<n;i++)
{
j=0;
t = arr[i]>=0?arr[i]:-arr[i];
while(t)
{
buf[j++] = (t & 0x0001) +'0';
t/=2;
}
if (arr[i]>=0)
{
buf[j] = 0;
for(j--;j>=0;j--)
printf("%c",buf[j]);
}else
{
for(k=j;k<16;k++)
buf[k] = '0';
//取反
for(k=0;k<16;k++)
{
if(buf[k]=='0')
buf[k] = '1';
else
buf[k] = '0';
}
//+1
k=0;
while(k<16)
{
if(buf[k] == '1')
{
buf[k] = '0';
k++;
}
else
{
buf[k]= '1';
break;
}
}
for(k=15;k>=0;k--)
printf("%c",buf[k]);
}
printf("\n");
}
return 0;
}