16进制的输入和输出【A+B Again(HDU2057)】

Problem Description

There must be many A + B problems in our HDOJ , now a new one is coming.
Give you two hexadecimal integers , your task is to calculate the sum of them,and print it in hexadecimal too.
Easy ? AC it !

Input

The input contains several test cases, please process to the end of the file.
Each case consists of two hexadecimal integers A and B in a line seperated by a blank.
The length of A and B is less than 15.

Output

For each test case,print the sum of A and B in hexadecimal in one line.

Sample Input

+A -A
+1A 12
1A -9
-1A -12
1A -AA

Sample Output

0
2C
11
-2C
-90
//////////////////////////////////////////////////////////////
题目求的是十六进制的加法。刚开始想的是把十六进制转化为十进制,进行加法运算后,再转化为十六进制。
后来发现自己忘了C中存在十六进制的输入输出(%X,%x)。所以这题可以直接用十六进制输入,然后进
行十六进制的运算(其实不管是什么进制,在计算机中都是以二进制来计算的,只是按输入输出的格式不同,
而强制转化为其它的进制),就像十进制的加法一样。这里要注意的是输入小于15位,结果超过了二进制中
的32位而小于64位。所以这里用__int64的类型。输入输入出格式就是(%I64x,%I64X)。由于%I64X,
不能输出负数,所以负数的输出要做处理。
#include <stdio.h>
int main()
{ 
	__int64 a,b; 
	while(scanf("%I64X%I64X",&a,&b)!=EOF) 
	{  
		printf(a+b<0?"-%I64X/n":"%I64X/n",a+b<0?-a-b:a+b); 
	} 
	return 0;
}
 

在这里 你要明白的是 计算机存入的数据是二进制 0 1  所以

scanf("%d",&a);就是你输入的一个十进制 比如 你输入10(这边是十进制数) 他也代表10(十六进制) 计算机存储是 10000

scanf("%x",&a);就是你输入的一个十六进制 比如 你输入10(是这边是十六进制数) 他也代表8(十进制) 计算机存储是 1000

而在计算b=a/15-273 的时候 计算机是用它们各自表示的二进制来计算的 因此事实上得到的b存在计算机里是以二进制存在的 只是当

你输出时候利用强制转换输出才变成我们想要的十进制或者十六进制 比如: 在b输出时候用十六进制输出 也就是printf("%x",b);

你可能感兴趣的:(c,less,存储,input,each,output)