c·c++/c 프로그래밍

소수점이 포함된 진법변환

바로이순간 2013. 5. 31. 22:15

#include <stdio.h>

#include <string.h>

int main() {

    int i, j, n;

    char str2[100], str8[100], strx[100];

    double x, y, z;


    // 2진수의 입력입니다.

    printf("2진수 입력: ");

    scanf("%s", str2);

    // 2진수를 10진수로 바꿉니다.

    n=0;

    j=strchr(str2, '.')-str2;

    for(i=0;i<j;++i) n=n+n+str2[i]-'0';

    // n은 정수 부분을 가지고 있습니다.

    x=1.0;

    y=0.0;

    for(i=j+1;i<strlen(str2);++i) {

        x=0.5*x;

        y=y+x*(double)(str2[i]-'0');

    }

    z=(double)n+y;

    // 10진수로 출력

    printf("10진수는: %g\n", z);


    // 8진수의 입력입니다.

    printf("8진수 입력: ");

    scanf("%s", str8);

    // 8진수를 10진수로 바꿉니다.

    n=0;

     j=strchr(str8, '.')-str8;

    for(i=0;i<j;++i) n=8*n+str8[i]-'0';

    // n은 정수 부분을 가지고 있습니다.

    x=1.0;

    y=0.0;

    for(i=j+1;i<strlen(str8);++i) {

        x=0.125*x;

        y=y+x*(double)(str8[i]-'0');

    }

    z=(double)n+y;

    // 10진수로 출력

    printf("10진수는: %g\n", z);


    // 16진수의 입력입니다.

    printf("16진수 입력: ");

    scanf("%s", strx);

    // 16진수를 10진수로 바꿉니다.

    n=0;

     j=strchr(strx, '.')-strx;

    for(i=0;i<j;++i) n=16*n+((strx[i]<58) ? strx[i]-'0' : ((strx[i]<97) ?  strx[i]-55 : strx[i]-87 ));

    // n은 정수 부분을 가지고 있습니다.

    x=1.0;

    y=0.0;

    for(i=j+1;i<strlen(strx);++i) {

        x=0.0625*x;

        y=y+x*(double)((strx[i]<58) ? strx[i]-'0' : ((strx[i]<97) ?  strx[i]-55 : strx[i]-87 ));

    }

    z=(double)n+y;

    // 10진수로 출력

    printf("10진수는: %g\n", z);


    return 0;

}


'c·c++ > c 프로그래밍' 카테고리의 다른 글

c언어 구문-syntax diagram  (0) 2013.06.02
math.h 헤더없이 sqrt계산하기  (0) 2013.06.02
2진수를 10진수로 바꾸기  (0) 2013.05.31
큰 정수의 곱셉  (0) 2013.05.31
2의 누승구하기  (0) 2013.05.31