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 |