A + B Again HDU
来源:互联网 发布:周扬青淘宝店铺货源 编辑:程序博客网 时间:2024/06/03 13:59
T - A + B Again
HDU - 2057There 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 !
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.
+A -A+1A 121A -9-1A -121A -AA
02C11-2C-90
思路:
其实这一道题就是我们做十六进制的加法问题~
好的~我们来看一下我们要温习的一些知识
1 2 3 4 5 6 7 8 9 0
A=10
B=11
C=12
D=13
E=14
F=15
看起来这是一个不定case而且是以文件的结束输入结束符号为结束标志的输入情况呢!
看来我们可以用两个string 数字来接收我们输入的数据了~
接受到我们的数据后应该如何处理呢?
嗯,我想,还是转换成我们熟悉的十进制来进行计算吧~
首先我们可以接收第一个字符,如果第一个字符是‘+’的话那么也没有什么所谓呀
如果是‘-’的话我们注意一下标记好了~
注意!我们要转换成10进制的时候,千万不能想当然!
要根据规则来计算啊!是对应位数乘上我们的权值的x次方!
说个例子吧~
例如A32;
A=10;它对应的是16*16,所以代表了2560
3,它对应的是16,所以代表了48
2,它代表的是1(16的0次方),所以代表了2;
所以这个数字转换为十进制的数字就是2610
再看一下有没有‘-’号标志,进行项对应的相反数处理。
我们得到了两个十进制的数字之后就可以进行求和啦~
求和完成了之后就是输出了,我们要注意的是
1
输出的时候,如果是正数并不需要输出一个‘+’
2
如果是负数,要输出一个‘-’哦!!
问题来了,我们应该如何输出答案呢?
这个时候我们需要有一点点的相对应的知识,那就是不断除,然后取余数
例如我们的十进制150,转换为十六进制的数字,
首先150/16=9(商)余6
然后 9(前商)/16=0(商)余9
然后余数从下面开始得,所以我们就得到了150(10进制)和96(十六进制)
我们就模拟这个过程,结束标志是商为0
对应的,根据所得余数,一个个存完后,再一个个从末尾进行处理,如果有必要,换成相对应的字符存到一个string里面,之后再进行输出
#include<iostream>#include<string>using namespace std;long long sum1 = 0;long long sum2 = 0;long long sum3 = 0;int main(){//A 10 B 11 C 12 D 13 E 14 F 15string x = " ";string y = " ";while (cin >> x >> y){sum1 = 0;sum2 = 0;sum3 = 0;long long a[15];long long b[15];for (int i = 0; i < 15; i++){a[i] = 0;}for (int i = 0; i < 15; i++){b[i] = 0;}if (x[0] == '+'){x.erase(0, 1);}if (y[0] == '+'){y.erase(0, 1);}int xnegative = 0;int ynegative = 0;if (x[0] == '-'){x.erase(0, 1);xnegative = 1;}if(y[0]== '-'){y.erase(0, 1);ynegative = 1;}for (int i = 0; i < x.size(); i++){long long j = 1;for (int k=1;k<x.size()-i;k++ ){j = j * 16;}if (x[i] >= 'A'&&x[i] <= 'F'){if (x[i] == 'A'){a[i] = 10 * j;}if (x[i] == 'B'){a[i] = 11 * j;}if (x[i] == 'C'){a[i] = 12 * j;}if (x[i] == 'D'){a[i] = 13 * j;}if (x[i] == 'E'){a[i] = 14 * j;}if (x[i] == 'F'){a[i] = 15 * j;}}else{a[i] = (x[i] - '0')*j;}}for (int i = 0; i < x.size(); i++){sum1 = sum1 + a[i];}if (xnegative == 1)sum1 = (-1)*sum1;//for (int i = 0; i < y.size(); i++){long long j = 1;for (int k=1; k<y.size() - i;k++){j = j * 16;}if (y[i] >= 'A'&&y[i] <= 'F'){if (y[i] == 'A'){b[i] = 10 * j;}if (y[i] == 'B'){b[i] = 11 * j;}if (y[i] == 'C'){b[i] = 12 * j;}if (y[i] == 'D'){b[i] = 13 * j;}if (y[i] == 'E'){b[i] = 14 * j;}if (y[i] == 'F'){b[i] = 15 * j;}}else{b[i] = (y[i] - '0')*j;}}for (int i = 0; i < y.size(); i++){sum2 = sum2 + b[i];}if (ynegative == 1){sum2 = (-1)*sum2;}//cout << sum1 << endl << sum2 << endl;sum3 = sum1 + sum2;if (sum3 < 0){cout << "-";sum3 = -1*sum3;}int h[100];for (int i = 0; i < 100; i++)h[i] = -1;long long shang = 0;for (int i=0;;i++){shang = sum3 / 16; h[i] = sum3 - shang * 16; if (shang == 0) break; sum3 = shang;}int pos = 0;for (int i = 0; i < 100; i++){if (h[i] == -1){pos = i;break;}}for (int i = pos; i >= 0; i--){if (h[i] == 10){cout << "A";}if (h[i] == 11){cout << "B";}if (h[i] == 12){cout << "C";}if (h[i] == 13){cout << "D";}if (h[i] == 14){cout << "E";}if (h[i] == 15){cout << "F";}if (h[i] >= 0 && h[i] <= 9){cout << h[i];}if (i == 0)cout << endl;}}}
- HDU A + B Again
- A + B Again HDU
- hdu 2057 A+B Again
- hdu 2057 A + B again
- HDU-2057A + B Again
- hdu 2057 A + B Again
- HDU 2057 A + B Again
- hdu-2057-A + B Again
- HDU 2057 A + B Again
- HDU 2057 A + B Again
- hdu 2057 A + B Again
- HDU 2057 A + B Again
- HDU - 2057 A + B Again
- hdu 2057 a + b again
- HDU-2057 A+B Again
- hdu 2057 A + B Again
- HDU 2057 A + B Again
- hdu 2057 A + B Again
- git代码撤消与回退
- 【js】pagination分页(支持首页,末页,跳转)
- 基于神经卷积网络的人脸识别
- 2017 Multi-University Training Contest
- ubuntu 安装pytorch
- A + B Again HDU
- mvn常用命令
- Communications link failure,The last packet successfully received from the server was *** millisecon
- E
- 如何用intellij idea新建一个java web+Servlet项目
- 7月25日云栖精选夜读:刷脸out了?阿里“刷脚购物”亮相CVPR 2017
- mysql case when 中可以使用and
- Google Instant Apps VS 微信小程序
- java.lang.ArrayIndexOutOfBoundsException(数组越界)处理方法