2016-03-26 4 views
-1

Я пытаюсь создать функцию, которая преобразует число в двоичный код в C++, но всякий раз, когда я вызываю функцию, она возвращает пустую строку.Функция строки, возвращающая пустую строку C++

Вот мой код:

#include <iostream> 
#include <stdio.h> 
#include <vector> 
#include <string.h> 
#include <math.h> 
#include <algorithm> 

using namespace std; 

string dec2bin(long long x, vector<long long> extra = { }) { 

    string out; 
    string output; 
    int i = 0; 
    long long sum = 0; 
    bool ok = false; 

    if(!extra.empty()) { 
     for(int a = 0; a < extra.end() - extra.begin(); a++) { 
      sum += pow(2, extra[a]); 
     } 
    } 

    while(pow(2, i) + sum < x) { 
     i++; 
    } 
    if(i > 0) { 
     i--; 
    } 
    extra.push_back(i); 

    if(pow(2, i) + sum == x) { 

     long long max = *max_element(extra.begin(), extra.end()); 

     for(int a = max; a >= 0; a--) { 
      if(std::find(extra.begin(), extra.end(), a) < extra.end()) { 
       out += '1'; 
      } 
      else { 
       out += '0'; 
      } 
     } 
     ok = true; 
    } 

    if(ok) { 
     return out; 
    } 
    else { 
     dec2bin(x, extra); 
    } 
} 

int main() { 

    long long a; 
    cin >> a; 

    cout << dec2bin(a) << endl; 

    return 0; 

} 

Если добавить строку, содержащую cout << out << endl; до возвращения заявления, она выводит строку. Любая помощь очень ценится :)

+0

Вы не должны использовать 'pow'. Вы потенциально теряете цифры, так как 'pow' возвращает double, и вы потенциально храните' double' в 'long long'. Увеличьте уровень предупреждения на своем компиляторе. – PaulMcKenzie

+0

Также см. Это относительно использования 'pow' для целочисленного использования: http://stackoverflow.com/questions/25678481/why-pown-2-return-24-when-n-5 – PaulMcKenzie

ответ

0

Под еще изменения dec2bin(x, extra); к:

return dec2bin(x, extra); 

Я думаю, что это ваша проблема.

Смежные вопросы