2016-02-09 2 views
0

Я создал программу, которая рекурсивно преобразует десятичные знаки в двоичную и выводит значение на экран.Возвращаемая двоичная строка из десятичного-> двоичного преобразования вместо значений печати

Однако, я хочу, чтобы эта программа вернула string, который содержит 1 и 0, составляющие двоичное число. Я пробовал множество путей неудачно, и я не уверен, как реализовать это изменение.

void decToBin(int n) { 
    int remainder; 
    remainder = n%2; 
    if(n > 0) { 
     decToBin(n/2); 
     cout << remainder; 
    } 
} 
+1

Вместо того, чтобы записывать цифру в 'cout', добавьте ее в строку. Затем верните строку. – Barmar

ответ

1

использовать поток в памяти, а не std::cout, и возвращает буфер в конце:

#include <sstream> 

std::string decToBin(int n) { 
    std::ostringstream stream; 
    int remainder = n % 2; 
    if (n > 0) { 
     stream << decToBin(n/2); 
     stream << remainder; 
    } 
    return stream.str(); 
} 

Это довольно нежный ficient, потому что есть много распределений строк. Вероятно, вам нужен итеративный алгоритм, а не рекурсивный, так что вам нужен только один поток строк.

1
  1. Изменение возвращаемого значения decToBin в std::string.
  2. Объединить строковое представление remainder, чтобы вернуть значение рекурсивного вызова с помощью функции и вернуть ее.
std::string decToBin(int n) { 
    if(n > 0) { 
     std::ostringstream s; 
     s << n%2; 
     return decToBin(n/2) + s.str(); 
    } 

    // The terminating condition. 
    return ""; 
} 

Функция может быть сведена к одному облицовке с помощью:

std::string decToBin(int n) 
{ 
    return (n > 0) ? decToBin(n/2) + std::string(1, (n%2+'0')) : ""; 
} 
+0

'std :: ostringstream' здесь не подходит, как, возможно, тернарный условный /' '0' + n/2'/'std :: to_string'. – LogicStuff

+0

@LogicStuff, я не последовал тому, что вы пытаетесь сказать. Не могли бы вы рассказать? Благодарю. –

+0

@R Sahu Только, что 'if'-clause будет однострочным с любым из упомянутых альтернатив. – LogicStuff