Phoenix_x

Untitled

Feb 27th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 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.     system("pause");
  26. }
  27.  
  28. void convertToDec()
  29. {
  30.     if (index < hexNum.length()) //ако индексът е по-малък от броя символи на 16-ичното число
  31.     {
  32.         char hexDigit = hexNum[index];
  33.  
  34.         switch (hexDigit) //проверка на цифрата (от 1 до F) и смятане
  35.         {
  36.         case '1': decimalNum += 1 * pow(16, power); break;//1 * 16 на степен power
  37.         case '2': decimalNum += 2 * pow(16, power); break;
  38.         case '3': decimalNum += 3 * pow(16, power); break;
  39.         case '4': decimalNum += 4 * pow(16, power); break;
  40.         case '5': decimalNum += 5 * pow(16, power); break;
  41.         case '6': decimalNum += 6 * pow(16, power); break;
  42.         case '7': decimalNum += 7 * pow(16, power); break;
  43.         case '8': decimalNum += 8 * pow(16, power); break;
  44.         case '9': decimalNum += 9 * pow(16, power); break;
  45.         case 'A': decimalNum += 10 * pow(16, power); break;
  46.         case 'B': decimalNum += 11 * pow(16, power); break;
  47.         case 'C': decimalNum += 12 * pow(16, power); break;
  48.         case 'D': decimalNum += 13 * pow(16, power); break;
  49.         case 'E': decimalNum += 14 * pow(16, power); break;
  50.         case 'F': decimalNum += 15 * pow(16, power); break;
  51.         }
  52.         index++; //продължи със следващата цифра от 16-ичното число
  53.         power--; //защото А1 = 10 * 16^1 + 1 * 16^0
  54.  
  55.         convertToDec();
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment