Advertisement
Phoenix_x

Untitled

Feb 24th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <string> //string - поредица от символи - FE15A, става да се запише 16-ично число
  4.  
  5. using namespace std;
  6.  
  7. //декларация на функцията
  8. void convertToDec();
  9.  
  10. //глобални променливи
  11. string hexNum;//няколко символа, които представляват 16-ичното число, въведено от потребителя
  12. int decimalNum = 0; // числото, конвертирано в десетична бр. с-ма
  13. int index = 0; //индекс на символа от 16-тичното число
  14. int power; // степента на 16. Пример: (1А = 1 * 16^1 + 10 * 16^0 = 161)
  15.  
  16. void main()
  17. {
  18.     cout << "Hexademical: ";
  19.     cin >> hexNum;
  20.     cout << "Decimal: ";
  21.     power = hexNum.length() - 1; // започва се от 16 на степен (броят цифри на числото - 1)
  22.  
  23.     convertToDec(); //извикване на рекурсивната функция
  24.     cout << decimalNum << endl;
  25. }
  26.  
  27. void convertToDec()
  28. {
  29.     if (index < hexNum.length()) //ако индексът е по-малък от броя символи на 16-ичното число
  30.     {
  31.         char hexDigit = hexNum[index];
  32.  
  33.         switch (hexDigit) //проверка на цифрата (от 1 до F) и смятане
  34.         {
  35.         case '1': decimalNum += 1 * pow(16, power); break;//1 * 16 на степен power
  36.         case '2': decimalNum += 2 * pow(16, power); break;
  37.         case '3': decimalNum += 3 * pow(16, power); break;
  38.         case '4': decimalNum += 4 * pow(16, power); break;
  39.         case '5': decimalNum += 5 * pow(16, power); break;
  40.         case '6': decimalNum += 6 * pow(16, power); break;
  41.         case '7': decimalNum += 7 * pow(16, power); break;
  42.         case '8': decimalNum += 8 * pow(16, power); break;
  43.         case '9': decimalNum += 9 * pow(16, power); break;
  44.         case 'A': decimalNum += 10 * pow(16, power); break;
  45.         case 'B': decimalNum += 11 * pow(16, power); break;
  46.         case 'C': decimalNum += 12 * pow(16, power); break;
  47.         case 'D': decimalNum += 13 * pow(16, power); break;
  48.         case 'E': decimalNum += 14 * pow(16, power); break;
  49.         case 'F': decimalNum += 15 * pow(16, power); break;
  50.         }
  51.         index++; //продължи със следващата цифра от 16-ичното число
  52.         power--; //защото А1 = 10 * 16^1 + 1 * 16^0
  53.  
  54.         convertToDec();
  55.     }
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement