fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define FULL_ARR_SIZE 13
  4. #define DIGIT_ARR_SIZE 12
  5. #define ERROR_TEXT "bad input"
  6. #define ASSCI_TO_DIGIT 48
  7. #define ASSCI_TO_SMALL_LET 87
  8. #define ASSCI_TO_CAP_LET 55
  9.  
  10. /*
  11. целые числа b1 и b2 от 2 до 16 -- основание исходной и конечной с.с.***********
  12.  
  13. b1-ричная запись числа X -- от 1 до 12 b1-ричных цифр, возможно разделенных точкой на целую и дробную часть, всего не более 13 символов. *********
  14.  
  15. Если b1 и b2 в первой строке не от 2 до 16, то "bad input". **********
  16. Если в второй строке не b1-ричная запись, то "bad input".
  17. Иначе -- запись всей целой части X в b2-ричной с.с.
  18. и если X содержит дробную часть, то точка и первые 12 b2-ричных цифр дробной части.
  19.  
  20. Размер исполняемого файла + размер данных < 4Mb
  21.  
  22. */
  23.  
  24.  
  25. short scanf_bb();
  26. short int_part();
  27. short fra_part();
  28.  
  29. short main(){
  30.  
  31. short b1, b2;
  32. short input_i_part[FULL_ARR_SIZE];
  33. short input_f_part[FULL_ARR_SIZE];
  34. //char int_in_10[];
  35.  
  36. if (scanf_bb(&b1, &b2)){
  37. printf("%s", ERROR_TEXT);
  38. return EXIT_SUCCESS; //конец в б1б2 - конец
  39. }
  40.  
  41.  
  42. short output_int_part = int_part(input_i_part, &b1);
  43.  
  44. if (output_int_part == 1){
  45. printf("%s", ERROR_TEXT);
  46. return EXIT_SUCCESS; //конец в целой - конец
  47. }
  48. else if (output_int_part == 2){
  49. short output_frac = fra_part(input_f_part, &b1);
  50. if (output_frac == 1) {
  51. printf("%s", ERROR_TEXT);
  52. return EXIT_SUCCESS;
  53. }
  54. }
  55.  
  56. for(int i = 0; input_i_part[i] != EOF; i++){
  57. printf("%d", input_i_part[i]);
  58. }
  59. printf("\n");
  60. for(int i = 0; input_f_part[i] != EOF; i++){
  61. printf("%d", input_f_part[i]);
  62. }
  63.  
  64. return EXIT_SUCCESS;
  65. }
  66.  
  67.  
  68. short scanf_bb(short* b1, short* b2){
  69. if ((scanf("%hd%hd", b1, b2)) != 2 || (*b1 < 2) || (*b1 > 16) || (*b2 < 2) || (*b2 > 16))
  70. return 1; //числа вне диапазона
  71. else return 0;
  72. }
  73.  
  74. short int_part(short input_i_part[], short* b1){
  75.  
  76. char this_digit = 0;
  77. short output = 0;
  78.  
  79. for (int i = 0; (i < DIGIT_ARR_SIZE) && (this_digit != '\n'); i++){
  80. this_digit = getchar();
  81.  
  82. if ((*b1 <= 10) && (this_digit >= '0') && (this_digit <= '9')){
  83. input_i_part[i] = this_digit - ASSCI_TO_DIGIT;
  84. if (input_i_part[i] >= *b1) return 1;
  85. }
  86. else if ((*b1 <= 16) && (this_digit >= 'a') && (this_digit <= 'f')){
  87. input_i_part[i] = this_digit - ASSCI_TO_SMALL_LET;
  88. if (input_i_part[i] >= *b1) return 1;
  89. }
  90. else if ((*b1 <= 16) && (this_digit >= 'A') && (this_digit <= 'F')){
  91. input_i_part[i] = this_digit - ASSCI_TO_CAP_LET;
  92. if (input_i_part[i] >= *b1) return 1;
  93. }
  94. else if (this_digit == '.'){
  95. if (i == 0)
  96. return output + 1;
  97. else {
  98. output += 2;
  99. break;
  100. }
  101. }
  102. else return output + 1; //введен не допустимый символ - конец
  103. }
  104. input_i_part[FULL_ARR_SIZE - 1] = EOF;
  105. return output;
  106. }
  107.  
  108. short fra_part(short input_f_part[], short* b1){
  109.  
  110. char this_digit;
  111.  
  112. for (int i = 0; (i < DIGIT_ARR_SIZE) || (this_digit != '\n'); i++){
  113.  
  114. if ((this_digit = getchar()) == 1){
  115.  
  116. if ((*b1 <= 16) && (this_digit >= '0') && (this_digit <= '9'))
  117. input_f_part[i] = this_digit - ASSCI_TO_DIGIT;
  118. if (input_f_part[i] >= *b1) return 1;
  119.  
  120. else if ((*b1 <= 16) && (this_digit >= 'a') && (this_digit <= 'f'))
  121. input_f_part[i] = this_digit - ASSCI_TO_SMALL_LET;
  122. if (input_f_part[i] >= *b1) return 1;
  123.  
  124. else if ((*b1 <= 16) && (this_digit >= 'A') && (this_digit <= 'F'))
  125. input_f_part[i] = this_digit - ASSCI_TO_CAP_LET;
  126. if (input_f_part[i] >= *b1) return 1;
  127.  
  128. else return 1; //введен недопустимый символ - конец
  129. }
  130. else return 1; //не распознан символ - конец
  131. }
  132. input_f_part[FULL_ARR_SIZE - 1] = EOF;
  133. }
  134.  
  135. int ib1_to_10(char int_in_10[], const short* input_i_part, int* b1){
  136.  
  137. }
Success #stdin #stdout 0s 5256KB
stdin
Standard input is empty
stdout
bad input