#include <iostream>
#include <string>
#include <map>
#include <cctype>
#include <algorithm>
using namespace std;
int convert2i(char item) {
static bool isFirst = true;
static map<char, int>lookup;
if(isFirst){
for(int i=0;i<16;++i)
lookup["0123456789ABCDEF"[i]]=i;
isFirst = false;
}
return lookup[::toupper(item)];
}
char convert2C(int num){
static bool isFirst = true;
static map<int, char>lookup;
if(isFirst){
for(int i=0;i<16;++i)
lookup[i]="0123456789ABCDEF"[i];
isFirst = false;
}
return 0 <= num && num <= 15 ? lookup[num] : -1;
}
void addition(char hexDecOne[10], char hexDecTwo[10], char (&hexDecSum)[10]) {
int carry = 0;
for (int i = 0; i < 9; i++) {// 9 : 10-1 (-1 for EOS)
int wk = convert2i(hexDecOne[i]) + convert2i(hexDecTwo[i]) + carry;
if(wk < 16){
carry = 0;
} else {
carry = 1;
wk -= 16;
}
hexDecSum[i] = convert2C(wk);
}
if(carry)
cerr << "overflow in addition" << endl;
}
int main(void){
char hex1[10] = "000000001";
char hex2[10] = "00000000F";
char sum[10];
addition(hex1, hex2, sum);
reverse(sum, sum+sizeof(sum)-1);//reverse(&sum[0], &sum[9]);//[0,9)
cout << string(sum) << endl;//000001AA9
}
ICNpbmNsdWRlIDxpb3N0cmVhbT4KICNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPGNjdHlwZT4KICNpbmNsdWRlIDxhbGdvcml0aG0+CgogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiBpbnQgY29udmVydDJpKGNoYXIgaXRlbSkgewogICAgIHN0YXRpYyBib29sIGlzRmlyc3QgPSB0cnVlOwogICAgIHN0YXRpYyBtYXA8Y2hhciwgaW50Pmxvb2t1cDsKICAgICBpZihpc0ZpcnN0KXsKICAgICAgICAgZm9yKGludCBpPTA7aTwxNjsrK2kpCiAgICAgICAgICAgICBsb29rdXBbIjAxMjM0NTY3ODlBQkNERUYiW2ldXT1pOwogICAgICAgICBpc0ZpcnN0ID0gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiBsb29rdXBbOjp0b3VwcGVyKGl0ZW0pXTsKIH0KCiBjaGFyIGNvbnZlcnQyQyhpbnQgbnVtKXsKICAgICBzdGF0aWMgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKICAgICBzdGF0aWMgbWFwPGludCwgY2hhcj5sb29rdXA7CiAgICAgaWYoaXNGaXJzdCl7CiAgICAgICAgIGZvcihpbnQgaT0wO2k8MTY7KytpKQogICAgICAgICAgICAgbG9va3VwW2ldPSIwMTIzNDU2Nzg5QUJDREVGIltpXTsKICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gMCA8PSBudW0gJiYgbnVtIDw9IDE1ID8gbG9va3VwW251bV0gOiAtMTsKIH0KCiB2b2lkIGFkZGl0aW9uKGNoYXIgaGV4RGVjT25lWzEwXSwgY2hhciBoZXhEZWNUd29bMTBdLCBjaGFyICgmaGV4RGVjU3VtKVsxMF0pIHsKICAgICBpbnQgY2FycnkgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKSB7Ly8gOSA6IDEwLTEgKC0xIGZvciBFT1MpCiAgICAgICAgIGludCB3ayA9IGNvbnZlcnQyaShoZXhEZWNPbmVbaV0pICsgY29udmVydDJpKGhleERlY1R3b1tpXSkgKyBjYXJyeTsKICAgICAgICAgaWYod2sgPCAxNil7CiAgICAgICAgICAgICBjYXJyeSA9IDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjYXJyeSA9IDE7CiAgICAgICAgICAgICB3ayAtPSAxNjsKICAgICAgICAgfQogICAgICAgICBoZXhEZWNTdW1baV0gPSBjb252ZXJ0MkMod2spOwogICAgIH0KICAgICBpZihjYXJyeSkKICAgICAgICAgY2VyciA8PCAib3ZlcmZsb3cgaW4gYWRkaXRpb24iIDw8IGVuZGw7CiB9CgogaW50IG1haW4odm9pZCl7CiAgICAgY2hhciBoZXgxWzEwXSA9ICIwMDAwMDAwMDEiOwogICAgIGNoYXIgaGV4MlsxMF0gPSAiMDAwMDAwMDBGIjsKICAgICBjaGFyIHN1bVsxMF07CgogICAgIGFkZGl0aW9uKGhleDEsIGhleDIsIHN1bSk7CiAgICAgcmV2ZXJzZShzdW0sIHN1bStzaXplb2Yoc3VtKS0xKTsvL3JldmVyc2UoJnN1bVswXSwgJnN1bVs5XSk7Ly9bMCw5KQogICAgIGNvdXQgPDwgc3RyaW5nKHN1bSkgPDwgZW5kbDsvLzAwMDAwMUFBOQogfQ==