HDOJ 2057 A + B Again(水题,基础)

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 !
 

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
 

Author
linle
 

Source
 

Recommend
linle   |   We have carefully selected several similar problems for you:   2060  2058  2056  2054  2061 
 

思路:

基础的水题,了解 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
}
/*


*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值