fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <map>
  4. #include <cctype>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. int convert2i(char item) {
  10. static bool isFirst = true;
  11. static map<char, int>lookup;
  12. if(isFirst){
  13. for(int i=0;i<16;++i)
  14. lookup["0123456789ABCDEF"[i]]=i;
  15. isFirst = false;
  16. }
  17. return lookup[::toupper(item)];
  18. }
  19.  
  20. char convert2C(int num){
  21. static bool isFirst = true;
  22. static map<int, char>lookup;
  23. if(isFirst){
  24. for(int i=0;i<16;++i)
  25. lookup[i]="0123456789ABCDEF"[i];
  26. isFirst = false;
  27. }
  28. return 0 <= num && num <= 15 ? lookup[num] : -1;
  29. }
  30.  
  31. void addition(char hexDecOne[10], char hexDecTwo[10], char (&hexDecSum)[10]) {
  32. int carry = 0;
  33. for (int i = 0; i < 9; i++) {// 9 : 10-1 (-1 for EOS)
  34. int wk = convert2i(hexDecOne[i]) + convert2i(hexDecTwo[i]) + carry;
  35. if(wk < 16){
  36. carry = 0;
  37. } else {
  38. carry = 1;
  39. wk -= 16;
  40. }
  41. hexDecSum[i] = convert2C(wk);
  42. }
  43. if(carry)
  44. cerr << "overflow in addition" << endl;
  45. }
  46.  
  47. int main(void){
  48. char hex1[10] = "000000001";
  49. char hex2[10] = "00000000F";
  50. char sum[10];
  51.  
  52. addition(hex1, hex2, sum);
  53. reverse(sum, sum+sizeof(sum)-1);//reverse(&sum[0], &sum[9]);//[0,9)
  54. cout << string(sum) << endl;//000001AA9
  55. }
Success #stdin #stdout #stderr 0s 3432KB
stdin
Standard input is empty
stdout
000000000���a�
stderr
overflow in addition