반응형




어떤 수가 있고(0~Z) 그 수가 n진법(2진법 ~ 36진법)으로 나타나져 있을때, 그 수를 10진법으로 변환하는 알고리즘이다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <string.h>
#include <math.h>
 
char string[40];
double ans;
 
int main()
{
    int n;
    int i;
    int len;
    
    
 scanf("%s",string);
 scanf("%d",&n);
 
 len = strlen(string);
 
 
for(i = 0 ; i < len ; i++)
{
 if48 <= string[i] && string[i] <= 57)
 {
  string[i] = string[i] - 48;   
 }      
 
 else if65 <= string[i] && string[i] <= 90
 {
  string[i] = string[i] - 55;    
 }
}

 
 for(i = len-1 ; i >= 0 ; i --)
 {
  ans = ans + string[i]*pow(n,len-i-1);     
 }
 
 printf("%.0lf",ans);
 
}
 
Crocus






string 배열에 문자열로 수를 받아 낸 뒤, 

몇 진법으로 표현되어있는지 n을 받아낸다.


그리고 아스키 코드에 의해 48~57은 0~9이고

65~90은 A~Z이다.


그 수들을 조건에 맞추어 -48또는, -55를 하여 

0~35의 값을 만들어낸다.


그리고 pow함수를 통해 결과값을 계산하여 받아낸다.

pow(a,b)는 a의 b승을 의미한다.

(math.h 헤더에 존재한다.)


반응형