对不起我糟糕的英语。我试着编写完成这项工作的代码: - 给出一个号码,并尽快通过我向您展示的方式尽快倒数至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;
}
感谢您解释我的回答!
答案 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;
}