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

소수점이 포함된 진법변환

바로이순간 2012. 4. 24. 10:00

10진법 => 10진법은 필요 없을 것 같습니다.

 

정수가 아니라 소수점이 있다고 하니까, 사용자가 직접작성을 해야만 하겠습니다.


#include <iostream>

using namespace std;

int main() {

    int i, j, n;

    string str2, str8, strx;

    double x, y, z;


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

    cout<<"10진수 입력: ";

    cin>>x;

    cout<<"10진수는: "<<x<<endl;


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

    cout<<"2진수 입력: ";

    cin>>str2;

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

    n=0;

    j=str2.find('.', 0);

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

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

    x=1.0;

    y=0.0;

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

        x=0.5*x;

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

    }

    z=(double)n+y;

    // 10진수로 출력

    cout<<"10진수는: "<<z<<endl;


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

    cout<<"8진수 입력: ";

    cin>>str8;

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

    n=0;

    j=str8.find('.', 0);

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

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

    x=1.0;

    y=0.0;

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

        x=0.125*x;

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

    }

    z=(double)n+y;

    // 10진수로 출력

    cout<<"10진수는: "<<z<<endl;


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

    cout<<"16진수 입력: ";

    cin>>strx;

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

    n=0;

    j=strx.find('.', 0);

    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<strx.length();++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진수로 출력

    cout<<"10진수는: "<<z<<endl;


    return 0;

}


위의 프로그램이면 되겠습니다.

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

패스워드 파일을 읽고 처리하는 간단한 예제  (0) 2012.05.29
sstream의 활용 - sscanf   (0) 2012.05.16
열린 문의 갯수  (0) 2012.04.16
width, precision  (0) 2012.03.31
버블정렬 이해하기  (0) 2012.03.31