Напишите функцию hextodec, которая преобразует шестнадцатеричное число (заданное в виде строки) в десятичное число int hextodec(std: : string hexstring) { return 0; }
int hexCharToDec(char hexChar) { switch (hexChar) { case 'a': return 10; break; case 'b': return 11; break; case 'c': return 12; break; case 'd': return 13; break; case 'e': return 14; break; case 'f': return 15; break; default: return hexChar - 48; break; } }
int hexToDec(string hexString) { std::transform(hexString.begin(), hexString.end(), hexString.begin(), ::tolower); int power = 0, ret = 0; for (string::reverse_iterator rit = hexString.rbegin(); rit != hexString.rend(); ++rit) { ret += hexCharToDec(*rit) * pow(16, power); power++; } return ret; }
Сумма номеров от 1 до 9 равна 45. Сумма от 10 до 19 равна 10 + 45 = 55. Сумма от 20 до 29 равна 2*10 + 45 = 65. Сумма от 30 до 39 равна 3*10 + 45 = 75. ... Сумма от 90 до 99 равна 9*10 + 45 = 135. Сумма всех цифр от 1 до 99 равна 45 + 55 + 65 + ... + 135 = (45 + 135)*10/2 = 180*10/2 = 900 В номерах от 100 до 199 та же сумма цифр 900 + 100*1 = 1000 В номерах от 200 до 209 сумма цифр 2*9 + 45 = 18 + 45 = 63 В номерах от 210 до 212 сумма цифр 2+1+0+2+1+1+2+1+2 = 12 Итого сумма всех цифр 900 + 1000 + 63 + 12 = 1975
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
int hexCharToDec(char hexChar)
{
switch (hexChar) {
case 'a':
return 10;
break;
case 'b':
return 11;
break;
case 'c':
return 12;
break;
case 'd':
return 13;
break;
case 'e':
return 14;
break;
case 'f':
return 15;
break;
default:
return hexChar - 48;
break;
}
}
int hexToDec(string hexString)
{
std::transform(hexString.begin(), hexString.end(), hexString.begin(), ::tolower);
int power = 0, ret = 0;
for (string::reverse_iterator rit = hexString.rbegin(); rit != hexString.rend(); ++rit) {
ret += hexCharToDec(*rit) * pow(16, power);
power++;
}
return ret;
}
int main()
{
string s;
cout << "Строка: ";
cin >> s;
cout << endl << "ответ: " << hexToDec(s) << endl;
return 0;
}