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,没错吧?
可是结果是下图:
这并不是我们想要的结果,所以只能我们自己判断一下然后加一个负号,即:
int main()
{
int a = -10, b = 9;
if (a+b<0)
{
cout << hex << '-' << -(a+b) << endl;
}
else
{
cout << hex << a+b << endl;
}
return 0;
}
8进制
//8进制
cout << oct << a+b << endl;
若出现负数,同16进制。(8进制就没有大小写的问题,因为8进制里面连8都没有出现,所以更不会出现比8大的数)
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;
}