反向并比较矢量C ++

时间:2015-05-03 20:59:21

标签: c++ vector compare reverse

对不起我糟糕的英语。我试着编写完成这项工作的代码: - 给出一个号码,并尽快通过我向您展示的方式尽快倒数至1: 例如:给出423 - >反转所有数字:324 - >倒计时到322 - >反向:223 - >倒数到221 - >反向:122 - > 120 - > 21(021) - > 12 - >倒计时到1。 - 我的算法比较数字的第一个数字和最后一个数字,如果(第一个>最后一个)我将反转,如果不是,我将倒计时直到(第一个>最后一个)。它适用于任何数字,如121,131,但不适用于101.所以我不明白为什么? 这是我的代码:

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int nb_digit(int a)
{
    return (int)floor(log10(a)) + 1;
}

int * separate(int a,int b)
{
    int i=0;
    static int digit[10];   
    while(b != 0)
    {   
        b--;
        digit[i] = a/(int)pow(10,b);
        a = a-digit[i]*(int)pow(10,b);
        i++;
    }
    return digit;
}



int main()
{
    int a,b,i=0;
    int *digit;
    cout<<"a = ";
    cin>>a;

    b = nb_digit(a);
    cout<<"a has "<<b<<" digit"<<endl;
    digit = separate(a,b);

    for(i=0;i<b;i++)
        cout<<*(digit+i)<<" ";
    cout <<endl;

    std::vector<int> v (digit, digit + b );
/*  reverse(v.begin(),v.end());

    cout<<"reverse digit:"<<endl;
    vector<int>::iterator it;

*/  vector<int>temp;
    vector<int>::iterator it;
    int count=9;

    while(v.size()>1)
    {   
        if( *(v.begin()) > *(v.end()-1) ) {
            temp = v;               
            reverse(v.begin(),v.end()); 
            if(v==temp)         // check reverse not changed
                (*(v.end()-1))--;
            if(*(v.begin())==0)
                v.erase(v.begin());
            cout<<"new number, reverse:"<<endl;
            for ( it= v.begin(); it != v.end(); ++it)
                cout << *it<< ' ' ;     
            cout << endl;
        }
        else if ( *(v.begin()) == *(v.end()-1) ) {
            if ( *(v.begin()+1) > *(v.end()-2) ) {
                temp = v;
                reverse(v.begin(),v.end());
                if(v==temp)         // check reverse not changed
                    (*(v.end()-1))--;
                if(*(v.begin())==0)
                    v.erase(v.begin());
                cout<<"new number, reverse:"<<endl;
                for ( it= v.begin(); it != v.end(); ++it)
                    cout << *it<< ' ' ;     
                cout << endl;
            }
            else {  
                (*(v.end()-1))--;
                cout<<"new number, not reverse:"<<endl;
                for ( it= v.begin(); it != v.end(); ++it)
                    cout << *it<< ' ' ;
                cout << endl;
            }
        }
        else {  
            (*(v.end()-1))--;
            cout<<"new number, not reverse:"<<endl;
            for ( it= v.begin(); it != v.end(); ++it)
                cout << *it<< ' ' ;
            cout << endl;
        }
        count++;
    }

    cout << "count = "<<count<<endl;
    cout << '\n';   
    return 0;
}

感谢您解释我的回答!

1 个答案:

答案 0 :(得分:0)

可能还有更多内容,但您的单独功能中存在错误。尝试这样的事情:

int * separate(int a,int b)
{
    static int digit[10];
    while(b != 0)
    {
        b--;
        digit[b] = a % 10; // processing lowest digit first and 
                           // placing into array backward
        a /= 10;
    }
    return digit;
}