应该是还需要优化的,在此熟悉了 stl 中的sort()的应用,可能内存开销上有点问题,因为开了三个vector.
#include<iostream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
//sort 的使用;指向vector 的指针;pow 浮点类型
//注意题意中所有数字都是四位输出,因此输出一定是 数组形式一个个输出而不能是int输出
bool ascComp(int first,int end)
{
return(first > end);
}
bool desComp(int first,int end)
{
return (first < end);
}
void intConvertArray(vector<int> *vector,int num)
{
int temp = num;
for(int i = 3;i >= 0;i--)
{
(*vector).at(3-i) = temp / (pow(10,i));
temp = temp % (int)(pow(10,i));//注意浮点数的问题
}
}
void printVector(vector<int> temp)
{
for(int i = 0;i <temp.size();i++)
cout<<temp.at(i);
}
int main()
{
int N;
cin >> N;
vector<int> num(4),ascVec,dscVec,*p;
p = #//定义一个指向vector 的指针
intConvertArray(p,N);
//各个数位相等
if(num.at(0) == num.at(1) && num.at(0) == num.at(2) && num.at(0) == num.at(3))
{
cout<<N<<" - "<<N<<" = 0000"<<endl;
return 0;
}
int diff = 0;
while(diff != 6174)
{
sort(num.begin(),num.begin() + 4,ascComp);
ascVec = num;
int ascNum = 0,desNum = 0;
for(int i = 0;i < 4;i ++)
ascNum += num.at(i) * pow(10,3 - i);
dscVec = num;
for(int i = 0;i < 4;i ++)
desNum += num.at(i) * pow(10,3 - i);
diff = ascNum - desNum;
int diffVec = diff;
intConvertArray(p,diffVec);
printVector(ascVec);
cout<<" - ";
printVector(dscVec);
cout<<" = ";
printVector(*p);
cout<<endl;
}
return 0;
}