-
Notifications
You must be signed in to change notification settings - Fork 0
/
h050.cpp
133 lines (108 loc) · 2.07 KB
/
h050.cpp
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*********************************************************
* 전자정보통신대학 컴퓨터공학부 *
* 20143086 이명학 *
* problem 50 : 숫자의 진법 변환 *
*********************************************************/
#include<iostream>
#include<fstream>
#include<cstring>
class ChangeNumSystem
{
private:
int change_from;
int change_to;
char num[50];
public:
ChangeNumSystem(std::ifstream &input)
{
input>>change_from;
input>>num;
input>>change_to;
}
int ChangeDecimalSystem();//십진수로 변환
void ChangeSystem(int number);//진수변환
};
void main()
{
std::ifstream input;
input.open("input.txt");
int cases;
input>>cases;
for(int i=0; i<cases; i++)
{
ChangeNumSystem lf(input);
int number = lf.ChangeDecimalSystem();//num을 10진수로 변환시 number에저장
lf.ChangeSystem(number);
}
}
int ChangeNumSystem ::ChangeDecimalSystem()
{
int length = strlen(num);
int ten_num = 0;
int plus = 1;
int number[100];
//////////////////////////////////////////////////십진법으로 바꾸기/////////////////////////////////////////////////
for(int i=0; i<length; i++)
{
if(num[i]>='a')
{
num[i]-=87;
}
else
{
num[i]-=48;
}
}
for(int i=0; i<length; i++)
{
number[i]= num[i];
}
for(int i=2; i<17; i++)//2~16진법중 몇 진법인지 판별
{
if(change_from == i)// num이 i진법일때
{
for(int j=0;j<length;j++)
{
for(int k=0; k<length-j-1; k++)
{
number[j]*=i;
}
ten_num += number[j];
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////
return ten_num;
}
void ChangeNumSystem ::ChangeSystem(int number)
{
char save[50];
char answer[50];
int count=0;
for(int i=0;;i++)
{
if(number ==0)
{
break;
}
else
{
save[i]=number%change_to;
number/=change_to;
count++;
}
}
for(int i=0; i<count; i++)
{
answer[i]=save[count-i-1]+48;
if(answer[i]>'9')
{
answer[i]+=39;
}
}
for(int i=0; i<count; i++)
{
std::cout<<answer[i];
}
std::cout<<std::endl;
}