//PAT1019
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
void vector2i(vector<int>& v, int& sum) //vector转整型
{
sum = 0;
for (int i=0; i<v.size(); i++)
{
sum = v[i] + sum * 10;
}
}
void i2vector(vector<int>& v, int& n) //整型转vector
{
v.clear();
int sum = n;
while ( sum )
{
v.push_back( sum % 10 );
sum /= 10;
}
v.resize(4, 0); //若不满4位,则继续补0
reverse( v.begin(), v.end() ); //反转
}
bool is_same_vector(vector<int>& v) //4位整数是否完全相等
{
for (int i=1; i<v.size(); i++)
{
if ( v[i-1] != v[i] )
{
return false;
}
}
return true;
}
int main()
{
int n;
cin>>n;
do
{
vector<int> rv;
i2vector(rv, n); //将n转为vector rv
if ( is_same_vector(rv) ) //若4为整数相同,则输出,break
{
printf("%04d - %04d = 0000", n, n);
break;
}
sort(rv.begin(), rv.end()); //获取小到大的数,即被减数
int ri;
vector2i(rv, ri); //被减数向量转为被减数整型
vector<int>& lv = rv;
reverse(lv.begin(), lv.end()); //获取减数向量
int li;
vector2i(lv, li); //获取减数整型
n = li - ri; //通过整型相减获取结果
printf("%04d - %04d = %04d\n", li, ri, n);
} while( n != 6174 );
return 0;
}
1019 数字黑洞 (20)
最新推荐文章于 2022-03-10 10:29:30 发布