Endians 로컬에서 돌리면 예제 답 다 맞게 나오는데 왜 오답이 나올까요

  • suzakutheking
    suzakutheking

    visual studio로도 돌려보고
    혹시나해서 우분투 gcc로도 돌려봤는데
    예제 답들은 정확히 나왔어요
    근데 오답이 나오네요
    제가 놓친 부분이 있을까요?

    #include<stdio.h>
    #include<stdlib.h>
    
    unsigned long pow_bin(int base, int mul);
    
    int main() {
        int caseNumber;
        int i,j;
        unsigned long input;
        char bin[32];
        char bin_trans[32];
        unsigned long result;
    
        scanf("%d", &caseNumber);
        for (i=0;i<caseNumber;++i) {
            scanf("%u", &input);
    
            for(j=31;j>=0;j--) {
                if(input / pow_bin(2, j) == 1) {
                    bin[31-j] = '1';
                    input = input % pow_bin(2,j);
                }
                else {
                    bin[31-j] = '0';
                }
            }
    
            for(j=31;j>=0;j--) {
                if(j>=24 && j<=31)
                    bin_trans[j] = bin[j-24];
                else if(j>=16 && j<=23)
                    bin_trans[j] = bin[j-8];
                else if(j>=8 && j<=15)
                    bin_trans[j] = bin[j+8];
                else if(j>=0 && j<=7)
                    bin_trans[j] = bin[j+24];
            }
    
            result = strtoul(bin_trans, NULL, 2);
            printf("%u\n", result);
        }
    
        return 0;
    }
    
    unsigned long pow_bin(int base, int mul) {
        unsigned long result = 1;
        unsigned long i;
    
        for(i=0;i<mul;++i) {
            result *= base;
        }
    
        return result;
    }
    

    8년 전
1개의 댓글이 있습니다.
  • seico75
    seico75

    bin과 bin_trans의 크기가 32인데, strtoul에서 문자열로 다루려면 null 넣을 곳이 있어야 할꺼 같네요..
    크기와 NULL 를 넣는 부분 추가가 필요해 보입니다.
    그리고, 꼭 다른 분들 답도 참고해보세요.


    8년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.