16진수가 입력으로 주어졌을 때, 이를 10진수로 변환하는 것이 과제입니다.
컴퓨터에서 16진수는 밑(base)이 16인 수 체계이며, 10진수는 밑이 10인 수 체계로 0부터 9까지의 값으로 표현됩니다. 반면 16진수는 0부터 15까지의 숫자를 사용하는데, 여기서 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F로 표현됩니다.
16진수를 10진수로 변환하려면 다음 단계를 따르면 됩니다.
- 오른쪽에서 왼쪽으로 자릿수를 하나씩 추출한 뒤, 각 자릿수에 0부터 시작하여 (자릿수 개수 - 1)까지 1씩 증가하는 거듭제곱 값을 곱합니다.
- 16진수에서 10진수로 변환할 때 거듭제곱의 밑은 16입니다. 16진수의 밑이 16이기 때문입니다.
- 입력된 각 자릿수에 밑과 거듭제곱 값을 곱한 결과를 저장합니다.
- 모든 곱셈 결과를 더하면 최종 결과가 되며, 이것이 바로 10진수 값입니다.
아래 그림은 16진수를 10진수로 변환하는 과정을 시각적으로 보여줍니다.

예시
입력: ACD A(10)는 다음과 같이 10진수로 변환됩니다: 10 X 16^2 = 2560 C(12)는 다음과 같이 10진수로 변환됩니다: 12 X 16^1 = 192 D(13)는 다음과 같이 10진수로 변환됩니다: 13 X 16^0 = 13 출력: 총합 = 13 + 192 + 2560 = 2765
알고리즘
Start Step 1-> declare function to convert hexadecimal to decimal int convert(char num[]) Set int len = strlen(num) Set int base = 1 Set int temp = 0 Loop For int i=len-1 and i>=0 and i— IF (num[i]>='0' && num[i]<='9') Set temp += (num[i] - 48)*base Set base = base * 16 End Else If (num[i]>='A' && num[i]<='F') Set temp += (num[i] - 55)*base Set base = base*16 End return temp step 2-> In main() declare char num[] = "3F456A" Call convert(num) Stop
예시
#include<iostream>
#include<string.h>
using namespace std;
//convert hexadecimal to decimal
int convert(char num[]) {
int len = strlen(num);
int base = 1;
int temp = 0;
for (int i=len-1; i>=0; i--) {
if (num[i]>='0' && num[i]<='9') {
temp += (num[i] - 48)*base;
base = base * 16;
}
else if (num[i]>='A' && num[i]<='F') {
temp += (num[i] - 55)*base;
base = base*16;
}
}
return temp;
}
int main() {
char num[] = "3F456A";
cout<<num<<" after converting to deciaml becomes : "<<convert(num)<<endl;
return 0;
}
출력
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
3F456A after converting to deciaml becomes : 4146538