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已AC:#include <iostream> #include <string> using namespace std; typedef long long ll; ll HenToTen(string &a); string TenToHen(ll a); int main() { string a, b; while(cin >> a >> b) { ll aa = HenToTen(a); ll bb = HenToTen(b); // cout << aa<<" "<<bb<<endl; aa = aa + bb; // cout << aa<<endl; string s = TenToHen(aa); cout << s << endl; } return 0; } ll HenToTen(string &a) { int s = 1; if(a[0]=='-') { s = -1; a.erase(0, 1); } else if(a[0]=='+') { s = 1; a.erase(0, 1); } int ss = a.size(); ll m = 0; for(int i=0; i<ss; ++i) { if(a[i]>64) a[i] -= 7; m = m*16+a[i]-'0'; } return s*m; } string TenToHen(ll a) { string s = "-"; if(!a) s += "0"; ll b = a; if(a<0) a *= -1; int k = 1; while(a) { int d; if((d=a%16)>9) d += 7; char ch = d+'0'; if(k) { s += ch; k = 0; } else s.insert(1, 1, ch); a /= 16; } // cout <<"b="<< b<<endl; if(b>=0) s.erase(0, 1); return s; }
好麻烦,写的超不顺... 绕来绕去晕了。或许还有更好的方法吧~ ╮(╯▽╰)╭