2012-11-25 4 views
0

저는 C++의 총 초보자입니다. 오늘은 10 진수를 2 진수로 변환하는 작은 프로그램을 작성하겠습니다. 코드는 다음과 같습니다.C++에서 10 진수를 2 진수로 변환

#include <iostream> 
void binaryConvert(int); 
int main() { 
    using namespace std; 
    cout << "Enter decimal number for conversion:" << endl; 
    int dec; 
    cin >> dec; 
    binaryConvert(dec); 
} 
void binaryConvert(int number) { 
    using namespace std; 
    while(number > 0) { 
     int bin = number % 2; 
     number /= 2; 
     cout << bin; 
    } 
} 

논리적으로이 프로그램은 이진수를 다른 방식으로 인쇄합니다.

void binaryConvert(int number) { 
    using namespace std; 
    if(number > 0) { 
     int bin = number % 2; 
     number /= 2; 
     binaryConvert(number); 
     cout << bin; 
    } 
} 

나는 그것 아마 알고 : 나는 이진수 주위 올바른 방법으로 표시 할 수 있도록 나는이 코드 조각을 건너 왔을 때 이진 숫자의 순서를 반전하는 방법을 알아 내려고 긴 시간을 보냈다 어리석은 질문 (나는 절대 초보자이다.) 그러나이 코드가 올바른 순서로 비트를 인쇄하는 이유를 알 수 없다. 또한 cout이 실행되기 전에 함수가 다시 호출되면 비트가 실제로 어떻게 인쇄됩니까?

+1

재귀를 살펴보십시오. 사람들은 대개 왜 거꾸로 있는지 묻습니다.하지만이 경우에는 잘 작동하고있는 것 같습니다. – chris

+0

재귀의 개념을 읽고 이해하십시오. 그것은 컴퓨터 과학에서 가장 중요하고 강력한 개념 중 하나입니다. 재귀를 이해하지 않고도 훌륭한 프로그래머가 될 수는 없습니다. – piokuc

+0

고마워, 나는 온라인 자습서를 사용하여 너무 오래 전에 C++을 배우기 시작했다. 내용을 탐색 할 때 나중에 재귀를 다룰 수 있다는 것을 깨달았습니다. * ( – whatonearthisstack

답변

0

재귀를 사용하면 기본 케이스에 충돌 (숫자 < = 0) 될 때까지 끝에있는 용지함이 인쇄되지 않고 스택 추적까지 올라갑니다.

2

기본적으로 "cout"은 "binaryConvert"다음에 호출되기 때문에. 모든 비트를 스택에 넣은 후 인쇄하는 것과 같습니다.

+0

OP에 대한 답을 자세히 알려주기 바란다. –

0

이 함수는 재귀 함수입니다. 가장 중요한 숫자를 인쇄하기 전에 가장 중요한 숫자를 먼저 인쇄하기 위해 재귀 적으로 호출합니다. 숫자가 0으로 될 때까지

0
int num; 
string BinaryRepresentation=""; 
cout<<"Input:"; 
cin>>num; 
string newstring= ""; 

bool h; 
h = true; 

while(h){ 
    BinaryRepresentation += boost::lexical_cast<std::string>(num % 2); 
    num = num/2; 
    if (num < 1){ 
     h = false; 
    } 
} 
for (int i = BinaryRepresentation.size() - 1; i >= 0; i--){ 
    newstring += BinaryRepresentation[i]; 

} 
    cout<< "Binary Representation: " << newstring <<endl; 

}

는 주로 프로그램의 아이디어는 수의 알림을 찾아 2 수를 나누고과 같은 절차를 반복 계속하는 것입니다 당신이 필요 입력 된 숫자와 동일한 이진수를 얻으려면 문자열을 뒤집으십시오.

0

프로그램에서 언급 한 바에 따르면 바이너리가 출력 결과물을 반전 시켰습니다. 바이너리를 올바른 순서로 넣으려면 두 번째 코드는 최종 비트를 얻은 후에 만 ​​출력을 시작합니다. 출력 순서는 빈에 대한 빈이며 따라서 원하는 출력을 얻습니다. 다음 코드는 더 이해를 도움이 될 수 http://ideone.com/Qm0m7L

void binaryConvert(int number) { 
    if(number > 0) { 
     int bin = number % 2; 
     number /= 2; 
     cout << bin<<" one"<<endl; 
     binaryConvert(number); 
     cout << bin<<" two"<<endl; 
    } 
} 

얻어진 출력은 다음과 같습니다

0 one 
0 one 
0 one 
1 one 
1 two 
0 two 
0 two 
0 two 

앞에 출력은 "하나"프로그램이 준 것 인 것이다. 차이점을 이해하시기 바랍니다.

0

10 진수에서 2 진수로 변환하기 위해 온라인에서 검색하는 동안 간단하고 이해하기 쉬운 솔루션을 찾지 못했습니다. 그래서 나는 독자적으로 프로그램을 썼다. 여기 있습니다.

#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 
void dtobin(int n) 
{ 
    ostringstream oss; 
    string st=""; 
if(n<0) 
{ 
    cout<<"Number is negative"; 
    return; 
} 
    int r; 
while(n!=1) 
{ 

    r=n%2; 
    oss<<st<<r; 
    n/=2; 
} 
oss<<st<<1; 
st=oss.str(); 
cout<<st; 
//To reverse the string 
int len=st.length(); 
int j=len-1; 
char x; 
for(int i=0;i<=len/2-1;i++) 
{ 
    x=st[i]; 
    st[i]=st[j]; 
    st[j]=x; 
    --j; 
} 
cout<<endl<<st; 
} 


    int main() 
{ 
    int n; 
    cout<<"ENTER THE NUMBER"; 
    cin>>n; 
    dtobin(n); 
    return 0; 
} 
관련 문제