WRONG ANSEWER 이라고 뜨네요... 이유를 잘 모르겠습니다

powerzt Reply 9 years 5 weeks ago
#include <stdio.h> #include <stdlib.h> int HextoDec(int a[],int size); int main(){ int c; int num[1000]; int numofP; int temp; int len=0; int answer[1000]; int idx=0; int i; numofP=getchar(); numofP -='0'; temp=getchar(); while((c=getchar())!= EOF){ while((c!='\n')&&(c!=EOF)){ num[len]=c; len++; c=getchar(); } answer[idx]=HextoDec(num,len); len=0; idx++; if(c==EOF) break; // if(idx==numofP) break; } for(i=0;i<numofP;i++){ if(answer[i]==-1) printf("null"); else printf("%d",answer[i]); // if(i!=(numofP-1)) printf("\n"); } system("pause"); return 0; } int HextoDec(int a[],int size){ int digit=1; int result=0; int i; int check=0; if((a[0]=='0')&&((a[1]=='x')||(a[1]=='X'))) { for (i = 0; i < size-2; i++) { if ((a[size-i-1] < '0') || ((a[size-i-1] > '9') && (a[size-i-1] < 'A')) || ((a[size-i-1] > 'F') && (a[size-i-1] < 'a')) || (a[size-i-1] > 'f')) { check = 1; break; } if((a[size-i-1]>='0')&&(a[size-i-1]<='9')) a[size-i-1] -= '0'; else if((a[size-i-1]>='A')&&(a[size-i-1]<='F')) a[size-i-1] = a[size-i-1]-'A'+10; else if((a[size-i-1]>='a')&&(a[size-i-1]<='f')) a[size-i-1] = a[size-i-1]-'a'+10; result += (a[size - i-1] * digit); digit *= 16; } } else check = 1; if(check){ return -1; } else return result; }
booksky Reply 9 years 5 weeks ago
의외의 장소에서 오류가 있었네요. numofP=getchar(); numofP -='0'; 이 부분이 잘못되었습니다. getchar()는 1개의 문자만을 받기 위한 함수입니다. 저 코드로는 0~9까지의 값이 들어오면 제대로 작동하겠지만 10 이상의 값이 들어오게 될 경우에는 문제가 발생하겠지요. 10을 예로 들면 numofP는 1을 받게 될 것입니다. 그리고 temp에 0이 들어가게 되겠지요. 이 문제를 해결하려면, 책에 있는 방법으로는 getline을 받아서 문제의 갯수를 문자열로 받고 atoi함수를 가지고 그 문자열을 정수로 바꿔주면 될 것입니다. 아니면 scanf라는 함수를 이용하면 좀 더 쉽게 숫자를 입력받을 수 있습니다. scanf는 책의 부록이나 인터넷을 검색해보시기 바랍니다.
powerzt Reply 9 years 5 weeks ago
감사합니다~!