Перевод из шестнадцатиричной системы в десятичную - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Изучаю язык Си по учебнику Кернигана и Ричи, столкнулся со следующей задачей: необходимо написать программу, которая бы преобразовывала последовательность цифр, начинающихся с 0x или 0X в соответствующее целое число. Цифры могут быть из диапазона 0..9 a..f A..F . Вот мой код:
#include <stdio.h>
#include <string.h>
 
#define MAXSIZE 10
 
int pow(int base,int number);
 
int main()
{
    char charArray[MAXSIZE];
    char c;
    int intSizeOfArray;
    int intDecimalNumber;
    int i;
    i = 0; intSizeOfArray = 0; intDecimalNumber = 0;
    while ((c=getchar())!=EOF)
    {
        if (i >= MAXSIZE - 1)
            break;
        else
        {
            charArray[i] = c;
            i++;
        }
    }
    charArray[i] = '\0';
    i = 0;
    if (charArray[0] == '0' && ((charArray[1] == 'x') || (charArray[1] == 'X')))
    {
        intSizeOfArray = strlen(charArray) - 3; //не считая первых двух символов и символа переноса каретки
        i = 2;
        while (intSizeOfArray != 0)
        {
            if (charArray[i] == 'A' || charArray[i] == 'a')
                intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 10;
            else if (charArray[i] == 'B' || charArray[i] == 'b')
                intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 11;
            else if (charArray[i] == 'C' || charArray[i] == 'c')
                intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 12;
            else if (charArray[i] == 'D' || charArray[i] == 'd')
                intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 13;
            else if (charArray[i] == 'E' || charArray[i] == 'e')
                intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 14;
            else if (charArray[i] == 'F' || charArray[i] == 'f')
                intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * 15;
            else if (charArray[i] >= '0' && (charArray[i] <= '9'))
                intDecimalNumber = intDecimalNumber + pow(intSizeOfArray,16) * (charArray[i] - '0');
            else
            {
                printf("%s", "Syntax error");
                break;
            }
            intSizeOfArray--; i++;
        }
        printf("%d",intDecimalNumber);
    }
    else
        printf("%s","That is not hexademical number");
    printf("%s","Press any key...");
    getchar();
    return 0;
}
int pow(int number,int base)
{
    int result;
    int i;
    result = 1; i = 0;
    while (i != (number - 1))
    {
        result = result*base;
        i++;
    }
    return result;
}
У меня несколько вопросов. 1. Подскажите, как улучшить код, дайте конструктивные советы. 2. При нажатии на комбинацию клавиш Ctrl + C выскакивает окно: Первый этап обработки исключения по адресу 0x75C6221B (KernelBase.dll) в 2.3_Program.exe: 0x40010005: Control-C. Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно. Как обработать правильно данную комбинацию? Заранее спасибо!

Решение задачи: «Перевод из шестнадцатиричной системы в десятичную»

textual
Листинг программы
float pow(float x, int n) {
   float y = 1;
   int i = n;
   while(i > 0) {
      if(i % 2 == 1) {
         y *= x; i--;
      } else {
         x *= x; i /= 2;
      }
   }
   return y;
}

Объяснение кода листинга программы

  1. Входные данные: число x типа float и целое число n.
  2. Переменная y инициализируется единицей.
  3. Переменная i инициализируется значением n.
  4. Начинается цикл while, который выполняется до тех пор, пока i больше нуля.
  5. Внутри цикла проверяется, является ли i нечетным числом.
  6. Если i нечетное, то y умножается на x и выполняется операция вычитания i на единицу.
  7. Если i четное, то x умножается на x и выполняется операция деления i на два.
  8. После окончания цикла, функция возвращает значение переменной y.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы