2.3.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <stdio.h>
  2. #include <math.h>
  3. enum boolean { false=0,true=1 } ;
  4. int ishex(char);
  5. long long int gethex(int);
  6. /*** long double is %Le */
  7. /** %lld is long long int. because that makes sense */
  8. int main()
  9. {
  10. char in=0;
  11. char buffer[32];
  12. for (int i =0; i < 15; i++)
  13. {
  14. buffer[i]=0;
  15. }
  16. long long int i =0;
  17. in=getchar();
  18. while(ishex(in))
  19. {
  20. buffer[i]=gethex(in);
  21. printf("buffer[ %lld ]: %d \n",i,buffer[i]);
  22. i++;
  23. in=getchar();
  24. }
  25. long long int sum =0;
  26. long int base = 1;
  27. for (int j=i-1; j>=0; j--)
  28. {
  29. printf("sum: %lld \n",sum);
  30. printf("base: %ld \n",base);
  31. printf("buffer[ %d ]: %d \n",j,buffer[j]);
  32. sum+=base*buffer[j];
  33. base*=0x10;
  34. if (sum<0)
  35. {
  36. printf (" ** ! houston, we have a problem. BigNum class needed ! \n");
  37. return -1;
  38. }
  39. }
  40. printf("%lld \n",sum);
  41. return (0);
  42. }
  43. int ishex(char in)
  44. {
  45. if ((in>='0') && (in<='9')) //decimal
  46. return true;
  47. if ((in>='a') && (in<='f')) //lowercase
  48. return true;
  49. if ((in>='A') && (in<='F')) //uppercase
  50. return true;
  51. return false;
  52. }
  53. long long int gethex(int in)
  54. {
  55. if ((in>='0') && (in<='9')) //decimal
  56. return in-'0';
  57. if ((in>='a') && (in<='f')) //lowercase
  58. return in-'a'+0xa;
  59. if ((in>='A') && (in<='F')) //uppercase
  60. return in-'A'+0xa;
  61. }