#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
char *YoWu_strrev(char *str1) { //사용자 정의 함수, strrev, str1을 받아와서 뒤집는다.
char str2[100]; //str1의 사본을 만들기위한 임시 배열.
int i,j;
for(i=0; str1[i]!=0; i++) //str1의 문자열을 str2에 복사한다.
{
str2[i]=str1[i];
}
str2[i]=0; //복사당한 str2의 마지막에 NULL 값을 넣어준다.
for(j=0; str1[j]!=0; j++) //str2의 마지막 값을 차례대로 str1의 첫 인덱스에 넣어준다.
{
str1[j]=str2[i-1]; //str2[i-1]인 이유는 str2[i]는 NULL이기 때문
i--;
}
return str1;
}
char *YoWu_itoa(int num, char *str, int bin) //사용자 정의 함수 itoa, 인자로써 문자열로 변환할 정수 값과, 변환된 값이 저장될 변수 그리고 어느 진법으로 표시할 것인가 하는 진수 값이 들어온다.
{
int i;
int tmpnum; //num의 복사본이다.
int one; //정수의 마지막 자릿수의 값을 저장하기 위한 변수이다.
tmpnum=num;
if(num == 0) str[0] = '0';
for(i=0; num>0; i++) //for문의 조건은 num이 0이 될 때까지이다.
{
one = num%bin; //one에 bin으로 나눈 나머지 값을 넣는다.
if(one>=10) //나머지 값이 10보다 클 경우 문자 값을 더해준다.
{
str[i]=(one-10)+'A'; //10을 빼는 이유는 만약 값이 10이 들어올경우 'a'가 아니라 'k'가 출력되기 때문, 십의 자리를 버려야한다.
}
else //나머지 값이 10보다 작을 경우
{
str[i]=one+'0'; //그냥 문자 '0'을 더해준다
}
num = num/bin; //위에서 한자리 값의 연산이 끝났으므로 자릿수를 줄여준다.
}
YoWu_strrev(str); //지금 배열에는 값이 뒤집혀서 들어가있다. (끝에 자리부터 연산을 첫 자리에 했기때문에) 이를 원래대로 만들기 위해 위에서 만든 사용자 정의함수 YoWu_strrev를 사용했다.
return str;
}
void main() {
char c[10000] = {0, };
int i;
int length = 0;
int search = 0;
int N_len = 0;
int B_len = 0;
char N_in[4] = {0, };
char B_in[2] = {0, };
char j=0;
int N = 0;
int B = 0;
int num = 0;
int num_len = 0;
int savenum[1000][6];
int question_num = 0;
char B_num = 0;
char solution[1000][50] = {"", };
char temp[50] = "";
while((c[length]=getchar())!=EOF) {
length++;
}
while(c[search] != ' ')
N_in[N_len++] = c[search++];
search++;
while(c[search] != '\n')
B_in[B_len++] = c[search++];
search++;
if(N_len == 1) N = N_in[0]-'0';
else if(N_len == 2) N = (N_in[0]-'0')*10 + (N_in[1]-'0')*1;
else if(N_len == 3) N = (N_in[0]-'0')*100 + (N_in[1]-'0')*10 + (N_in[2]-'0')*1;
else if(N_len == 4) N = (N_in[0]-'0')*1000 + (N_in[1]-'0')*100 + (N_in[2]-'0')*10 + (N_in[3]-'0')*1;
else;
if(B_len == 1) B = B_in[0]-'0';
else B = (B_in[0]-'0')*10 + (B_in[1]-'0')*1;
// printf("Number : %d\n", N);
// printf("B : %d\n", B);
for(i=search ; i<length ; i++) {
if(c[i+1] == '\n' || c[i+1] == '\0') {
savenum[question_num][num_len++] = c[i]-'0';
for(j=0 ; j<num_len ; j++) {
num += savenum[question_num][j]*(int)pow((double) 10, (num_len -j-1));
}
strcat(solution[question_num], YoWu_itoa(num, temp, B));
// for(j=0 ; j<50 ; j++) if(solution[question_num][j] >= 'a' && solution[question_num][j] <= 'z')
// solution[question_num][j] = solution[question_num][j] + ('A'-'a');
printf("%s\n", solution[question_num]);
/*
if(num/13 == 0) {
if(num<10) printf("%d\n", num%13);
else if(num>=10 && num<13) printf("%c\n", num%13-10+'A');
} else if (num/(13*13) == 0) {
if(num/13 < 10) {
if(num%13 < 10) printf("%d%d\n", num/13, num%13);
else if(num%13 >= 10 && num%13 < 13) printf("%d%c\n", num/13, ((num%13)-10+'A'));
} else if(num/13 >= 10 && num/13 < 13) {
if(num%13 < 10) printf("%c%d\n", num/13-10+'A', num%13);
else if(num%13 >= 10 && num%13 < 13) printf("%c%c\n", num/13-10+'A', ((num%13)-10+'A'));
}
}
*/
i++;
question_num++;
num = 0;
num_len = 0;
} else {
savenum[question_num][num_len++] = c[i]-'0';
}
}
}
11, 12, 13, 14, 15, 16 진수 다 5자리까지 정상적으로 출력되는데...뭐가 문제일까요?