Wrong Answer?

kassuass Reply 9 years 1 week ago
#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자리까지 정상적으로 출력되는데...뭐가 문제일까요?
JiungChoi Reply 9 years 1 week ago
야쓰
blacksianj Reply 9 years 6 days ago
우선 int main(void)양식을 지켜주세요. 그리고 c배열마지막에 널문자를 넣어야 어떤 조건문을 만족하는 것 같네요. 그리고 배열 길이가 이전 문자열에 의존하는지 3 4 12190 83680 45324 와 같은 input에서는 잘못 출력되네요. 어떤 줄에서는 앞에 0이 붙는 진법으로 출력되요. 고쳐주세요