教你夺冠


私信TA

用户名:835685327

访问量:156771

签 名:

相互交流 相互学习

等  级
排  名 15
经  验 22543
参赛次数 0
文章发表 84
年  龄 0
在职情况 学生
学  校 辣鸡施工大学
专  业

  自我简介:

努力刷题 熟能生巧!

以字符数组的方式处理的,感觉有点非主流。。


参考代码如下:

#include <stdio.h>

//原码转化为补码,分两种情况:1.正数不变2.负数原码符号位不变,其余位取反加一
int main(void)
{
	char bits[16];
	int i;
	for (i = 0; i < 16; i++)
	{
		bits[i] = getc(stdin);
		if (bits[0] == '0') //正数,不用处理
		{
			continue;
		}
		if (bits[0] == '1') //负数,其余位取反
		{
			if (i > 0)
			{
				if (bits[i] == '1')
					bits[i] = '0';
				else if (bits[i] == '0')
					bits[i] = '1';
			}
		}
	}
	
	if (bits[0] == '1') //负数,最后一位加1
	{
		//从后往前遍历
		for (i = 15; i >= 0; i--)
		{
			if (bits[i] == '0') //碰到'0'时置为'1',就可以退出了
			{
				bits[i] = '1';
				break; 
			}
			if (bits[i] == '1') 
			{
				bits[i] = '0';
			}
		}
	}
	
	//输出补码
	for (i = 0; i < 16; i++)
	{
		putchar(bits[i]);
	}
	printf("\n");
	
	return 0;
}


 

0.0分

8 人评分

  评论区

  • «
  • »