您的位置:首页 > 其它

uva 594 One Little, Two Little, Three Little Endians

2011-04-26 23:55 429 查看
//开始没理解好题意卡了很长时间

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void toer(char *s,int n)
{
int i;
if(n < 0){s[0] = '1'; n = -n;}
else
s[0] = '0';
for( i = 31;i > 0;i--){
s[i] = n%2 + '0';
n/=2;
}
s[32] = '/0';
}

int main()
{
int n,i;
while(scanf("%d",&n) != EOF)
{
char s[33];
toer(s,n);
if(s[0] == '1'){/*负数情况*/
for(i = 1;i < 32;i++)/*求反*/
if(s[i] == '1') s[i] = '0';
else s[i] = '1';

for(i = 31;i>0;i--){ /* 加1 */
if(s[i] == '0') {s[i] = '1';break;}
else s[i] = '0';
}
}

char ss[33];int count = 0;

for( i = 24;i < 32;i++) ss[count++] = s[i];
for(i = 16;i < 24;i++) ss[count++] = s[i];
for(i = 8;i < 16;i++) ss[count++] = s[i];
for(i = 0;i < 8;i++) ss[count++] = s[i];

ss[count] = '/0';

if(ss[0] == '1'){
for(i = 31;i>0;i--){ /* 减1 */
if(ss[i] == '1')
{ss[i] = '0';break;}
else ss[i] = '1';
}
/*取反*/
for(i = 1;i < 32;i++)
if(ss[i] == '1') ss[i] = '0';
else ss[i] = '1';
}

int num = 0,a = 1<<30;
for(i = 1;i < 32;i++){
num+=a*(ss[i] - '0');
a /= 2;
}

if(ss[0] == '1') num = -num;
printf("%d converts to %d/n",n,num);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: