fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cctype>
  4. #include <vector>
  5. #include <cstdint>
  6. #include <string>
  7. #include <limits>
  8. //test data.
  9. // 10 -10 1.1 -1.1 1234567890 -1234567890 1.234567890
  10. //
  11. bool IsNeeded(int ch) {
  12.  
  13. if (std::isdigit(ch)) return true;
  14. if (ch == 'e') return true;
  15. if (ch == '+') return true;
  16. if (ch == '-') return true;
  17. if (ch == '.') return true;
  18. return false;
  19. }
  20.  
  21. bool Info(std::vector<char>& SS, bool IsFloat) {
  22.  
  23. if (IsFloat) {
  24.  
  25. double D = atof(SS.data());
  26. if (!(std::numeric_limits<float>::max() >=D || std::numeric_limits<float>::min() <= D)) {
  27. std::cout << "double " <<" raw:"<< D << ' ' << sizeof(D)<<"byte" << std::endl;
  28. }
  29. else {
  30. std::cout << "float " <<" raw:"<< (float)D << ' ' << sizeof(float)<<"byte" << std::endl;
  31. }
  32. }
  33. else {
  34. std::intmax_t X = atoll(SS.data());
  35. std::intmax_t N = X;
  36. std::size_t B = 0;
  37. if (X < 0) {
  38. X = (~X) + 1;
  39. }
  40. for (std::size_t i = 0; i < std::numeric_limits < std::intmax_t > ::digits; i++) {
  41. if ((X & (1ll << i)) > 0) B = i;
  42. }
  43. std::cout << "int" << B+1 << "_t " <<"raw:"<< N << ' ' << (B / 8) + 1 <<"byte"<<" ???? "<< std::endl;
  44.  
  45. }
  46.  
  47. return true;
  48. }
  49.  
  50. int main() {
  51.  
  52. std::vector<char> S;
  53. int o = 0;
  54. std::vector<char> SS;
  55. bool F = false;
  56. bool IsFloat = false;
  57. bool IsDot = false;
  58. while (( o= std::getchar()) != EOF) {//tape sequence??
  59.  
  60. if (F == false && (o == '+' || o == '-')) {
  61. SS.push_back(o);
  62. continue;
  63. }
  64. if (o == '.' && IsDot == false) {
  65. IsFloat = true;
  66. IsDot = true;
  67. SS.push_back(o);
  68. continue;
  69.  
  70. }
  71. if (o == 'e' && IsFloat) {
  72. F = false;
  73. SS.push_back(o);
  74. }
  75.  
  76. if (o == ' ') {
  77. SS.push_back('\0');
  78. Info(SS, IsFloat);
  79. IsFloat = false;
  80. IsDot = false;
  81. SS.clear();
  82. }
  83. if (IsNeeded(o)) {
  84. SS.push_back(o);
  85. }
  86.  
  87. }
  88. if (SS.size()) { Info(SS, IsFloat); }
  89.  
  90. SS.clear();
  91.  
  92. return 0;
  93. }
  94.  
Success #stdin #stdout 0s 15240KB
stdin
10 -10 1.1 -1.1 1234567890 -1234567890 1.234567890
stdout
int4_t raw:10 1byte ???? 
int4_t raw:-10 1byte ???? 
float  raw:1.1 4byte
float  raw:-1.1 4byte
int31_t raw:1234567890 4byte ???? 
int31_t raw:-1234567890 4byte ???? 
float  raw:1.23457 4byte