프로그래밍

 3198, 1/160 회원가입  로그인  
   yj6393
   [c언어]십진수를 이진수로 변환해주는 프로그램

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3506 [복사]


int two(int num)
{
        int tw[8];
        int i;

        for(i=0;i<=8;i++)
        {
                if(num%2==1)
                {
                        tw[i]=1;
                        num/=2;
                }
                else
                {
                        tw[i]=0;
                        num/=2;
                }
        }
        for(;i>=0;i--)
                printf("%d",tw[i]);
        return 0;
}

int main()
{
        int num;
        
        printf("숫자 입력: ");
        scanf("%d",&num);
        two(num);
        return 0;
}
여기서 문제점을 알켜주세요.
글고 만약 코딩을 더 짧게하는 방법이 있으면 갈켜주세요

  Hit : 8794     Date : 2012/10/11 05:24



    
tlsdmq12 개인적으로 num /= 2 를 if 문의 밖으로 빼는 것이 좋다고 생각합니다.
공통된 부분을 저렇게 각각 쓰게 되면,,,,
나중에 프로그램의 덩치가 커져서 수정할 일이 생겼을때, 수정을 하였는데도
결과가 원하는 결과가 안 나올때, 저런 것이 이유가 될 수 있습니다.

그리고 int형의 매개변수를 받는데,,,, int형은 십진수 9자리,
2진수 32자리의 숫자를 입력 받을 수 있는데
8칸의 배열로는
전부다 표현하기에는 굉장히 작을 수 밖에 없습니다. 혹여 8칸만 필요한 것이라면
매개변수의 크기를 판단해주는 에러 처리를 해주던가,
조금 space를 많이 차지하더라도 32칸으로 만들어 주는 것이 좋습니다.
뭐, 꼭 int형 배열에 넣어서 표시하는 것은 좋은 것인지는 잘 모르겠지만,
프로그램의 자체 기능을 제외하고 부분적으로 추가해주면 좋을 것 같은 부분입니다.

뿐만아니라 출력해주는 부분도,,, 만약 8칸을 다쓰지 않게 되는경우에는
수를 표시한 뒷부분에 0이 계속 들어가게 되고,
제대로 된 결과는 나오지 않을 것입니다.
다른 int 형 변수 하나를 추가하던가,, 해서
입력한 index번호를 저장하고 출력하는 for문은 i를 이용하는 것이 아닌,
그 index번호를 저장하고 있는 int형 변수를 이용하는 것이 좋을 것 같습니다,
2012/10/11  
tlsdmq12 아 그리고,,, 꼭 return을 사용하지 않으실 것이라면,
사용자 정의 함수의 리턴은 void로 설정하시는 것이 좋다고 생각하고,

제일 좋다고 생각하는 것은 결과를 int * two(int num) 으로 하여서 배열을 리턴해주고 main에서 출력해주는 것이 좋다고 생각합니다.
two() 함수는 그저 2진수를 나타내주는 배열을 구하는 기능만을 하는 것이 좋다는 것이 제 생각입니다.
2012/10/11  
jwkzzangs #include <stdio.h>
#include <windows.h>

int main(void)
{
DWORD UserInput = 0;
char Buf[0x100] = {0, };

scanf("%d", &UserInput);

itoa((int)UserInput, Buf, 2);

printf("%s\n", Buf);

return 0;
}

가장 짧게 하는 방법입니다.
2012/10/12  
kumi123 일단, 식이 좀 안맞구요..

2진수로 변환후에.. i=9 가 되어있는 상태에서

출력을 하시면

배열주소값을 넘어 버려서

주소값 + tw[7]~~~~~tw[0] 으로 뜨거든요..

그래서 조건문에

if(num==1)
{
tw[i]=1;
break;
}
라는 문장을 추가하시면 바로 작동할겁니다
2012/11/24