2015-04-10 2 views
-1

Мы преобразуем базу 10 в число в другой базе (B). У меня возникают проблемы с функцией обратного преобразования void, это не приведет к изменению порядка чисел.C++ void reverse function

string convertToBaseB(int num, int b){ 
int digit; 
stringstream answer; 
string x=""; 
    while(num>0){ 
    digit=num%b; 
    num/=b; 
    answer<<digit; 
} 
    return answer.str();} 

void reverse(int x[],int size){//reversing the 

for(int k=0; k<size/2; k++){ 
    int temp=x[k]; 
    x[k]=x[size-k-1]; 
    x[size-k-1]=temp;} 
} 
+1

Что вы вводите? Какой у вас результат? Каков ваш ожидаемый результат? Как функция convertToBaseB (...) относится к вопросу, который вы задаете? –

+0

ввод представляет собой число в форме основания 10 и предполагается преобразовать его в новое число с другой базой ... функция обратного преобразования void должна менять порядок вывода значения преобразования в базовое определение b ... –

+0

Это все еще не говорит нам, что ваш вход для обратного является ... Какова ценность x и размера, который вы проходите? –

ответ

0

работает для меня:

#include <iostream> 

using namespace std; 

void reverse(int x[],int size) 
{ 

    for(int k=0; k<size/2; k++) 
    { 
    int temp=x[k]; 
    x[k]=x[size-k-1]; 
    x[size-k-1]=temp; 
    } 
} 

int main() 
{ 
    const int sz = 9; 
    int* digits; 

    digits = new int[sz]; 

    for (int i=0; i < sz; ++i) 
    { 
    digits[i] = i; 
    } 

    reverse(digits, sz); 

    for (int i=0; i < sz; ++i) 
    { 
    cout<<digits[i]<<" "; 
    } 
    cout<<endl; 
} 
+0

Это должен быть комментарий. Если вы хотите показать пример кода, который работает, добавьте ссылку на ideone.com. – Barmar

+0

Ненужное использование 'new' –

+0

Вообще-то избегайте ответов только на код. Подумайте о добавлении описания, которое поможет объяснить ваш код. _ «Работает для меня» _ не подходит печально. Спасибо – MickyD

1

Ваша обратная функция работает нормально. Однако это не выглядит как C++ мне ... В C++ я бы вектор и сделать:

std::vector<int> arr; 
//... fill arr 
std::swap_ranges(&arr[0], &arr[arr.size()/2], arr.rbegin()); 

Если вы хотите придерживаться вашего для петли, по крайней мере использовать станд :: своп, как этот

void reverse(int x[],int size) { 
    for(int k=0; k<size/2; k++) 
     std::swap(x[k], x[size-k-1]); 
} 
+0

Зачем злоупотреблять 'std :: swap_ranges' таким образом, когда есть [' std :: reverse'] (http://en.cppreference.com/w/cpp/algorithm/reverse)? – Blastfurnace