http://acm.hdu.edu.cn/showproblem.php?pid=2057
A + B Again
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 23442 Accepted Submission(s): 10144
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 !
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.
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
Author
linle
Source
Recommend
思路:
基础的水题,了解 C 的基础很必要昂。本想着模拟的,可总是卡。
ac code:
#include<stdio.h>
#include<cstring>
#include<algorithm>
#define HardBoy main()
#define ForMyLove return 0;
typedef __int64 LL;
using namespace std;
const int MYDD = 1103;
int HardBoy {
LL a, b;
while(scanf("%I64X %I64X", &a, &b) != EOF) {
LL ans = a+b;
if(ans < 0) {// 十六进制没有负数输出
printf("-");
ans = -ans;
}
printf("%I64X\n", ans);
}
ForMyLove
}
wa code:
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<algorithm>
#define HardBoy main()
#define ForMyLove return 0;
using namespace std;
const int MYDD = 1103;
int Get(char a) {//字母和数字的转化
if(a >= '0' && a <= '9') return a-'0';
if(a >= 'A' && a <= 'F') return 10 + a-'A';
}
int HardBoy {
char a[16], b[16];
while(scanf("%s %s", a, b) != EOF) {
int as = 0, al = strlen(a), mi = 0, shi = 0;
for(int j = al - 1; j >= 0; j--) {
if(a[j] == '+') as = as;
else if(a[j] == '-') as = -as;
else {
as = as + Get(a[j])*(int)pow(16, mi);
// printf("%d -> %d\n",j, as);
mi++;
shi++;
}
}
int bs = 0, bl = strlen(b);
mi = 0;
for(int j = bl - 1; j >= 0; j--) {
if(b[j] == '+') bs = bs;
else if(b[j] == '-') bs = -bs;
else {
bs = bs + Get(b[j])*(int)pow(16, mi);
// printf("%d -> %d\n",j, bs);
mi++;
shi++;
}
}
// printf("%d %d\n", as, bs);
int sum = as+bs;
if(sum == 0) {
puts("0");
continue;
}
if(sum<0) {
printf("-");
sum = -sum;
}
int cnt = 0;/*十进制到十六进制*/
char ans[32];
while(sum) {
int v = sum%16;
sum = sum/16;
if(v < 10)
ans[cnt] = '0'+v;
else
ans[cnt] = 'A'+v-10;
cnt++;
}
for(int j = cnt-1; j >= 1; j--)
printf("%c", ans[j]);
printf("%c\n", ans[0]);
}
ForMyLove
}
/*
*/