C与C++输入输出16和8进制

C++

1.输入

16进制

	//16进制输入
    cin >> hex >> a >> b;

8进制

	//8进制输入
	cin >> oct >> a >> b;

2.输出

注意:以16进制和8进制输出时没有负数的输出。

16进制

	cout << hex << a+b << endl;
	//使用setiosflags(ios::uppercase) 转换成大写字母 
	//需要引用头文件  
	cout << setiosflags(ios::uppercase) << hex << a+b << endl;

示例:

int main()
{
	int a = -10, b = 9;
	cout << hex << a+b << endl;
	return 0;
}

正常情况应该输出-10 + 9 = -1,没错吧?

可是结果是下图:

C与C++输入输出16和8进制_第1张图片

这并不是我们想要的结果,所以只能我们自己判断一下然后加一个负号,即:

int main()
{
	int a = -10, b = 9;
	if (a+b<0)
	{
		cout << hex << '-' << -(a+b) << endl;
	}
    else
    {
    	cout << hex << a+b << endl; 
	}
	return 0;
}

 C与C++输入输出16和8进制_第2张图片

8进制

	//8进制 
	cout << oct << a+b << endl; 

若出现负数,同16进制。(8进制就没有大小写的问题,因为8进制里面连8都没有出现,所以更不会出现比8大的数)

C语言

1.输入

16进制

	int a,b;
	//%x 表示存储的16进制数
	//这里x大小写无所谓 
	scanf("%x%x",&a,&b);

8进制

	int a,b;
	//%o 控制为8进制输入 
    //o的大小写也无所谓
	scanf("%o%o",&a,&b);

2.输出

16进制

	//为什么要判断,因为16和8进制数没有办法输出负数 
	//这里x输出大于等于10的数字为小写字母,反之X对应大写字母 
	if (a+b>=0)
	{
		printf("%x\n",a+b);
	} 
	else
	{
		printf("-%x\n",-(a+b));
	}

8进制

	if (a+b>=0)
	{
		printf("%o\n",a+b);
	}
	else
	{
		printf("-%o\n",-(a+b));
	}

训练题目

HDU2057(此题用C的输入输出更简单)

A + B Again - HDU 2057 - Virtual Judge (vjudge.net)

AC代码:

#include 
#include 
using namespace std;

typedef long long ll;

int main()
{
	ll a,b;
	while (cin >> hex >> a >> b)
	{
		ll c;
		c = a + b;
		if (c>=0)
		{
			cout << setiosflags(ios::uppercase) << hex << c << endl;
		}
		else
		{
			cout << setiosflags(ios::uppercase) << hex  << '-'<< -c << endl;
		}
	}
	return 0;
}

你可能感兴趣的:(模板,经验分享)