1019 数字黑洞 (20)

//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;
}

posted on 2014-01-07 00:08  bug睡的略爽  阅读(707)  评论(0编辑  收藏  举报

导航