POJ1350 Cabric Number Problem [模拟]

思路:

对这种整数的各个位上的数字之间的操作还是习惯用类似左移右移的方法,即/=10,*=10的方法写。

感觉这样写思路清晰。AC后找了网上别人的代码想对比,这样写代码也精简得多,而且不需要什么字符串的处理。

#include<iostream>
#include<string>
#include<algorithm>
#define max(a,b) (a>b?a:b)
#define abs(a) ((a)>0?(a):-(a))
#define min(a,b) (a<b?a:b)
using namespace std;
int n,m;
int arr[4];
int main()
{
	while(scanf("%d",&n),n!=-1)
	{
		m=0;
		printf("N=%d:\n",n);
		while(n!=0&&n!=6174)
		{
			int a=0,b=0,i=0;
			while(n)
			{
				arr[i++]=n%10;
				n/=10;
			}
			sort(arr,arr+i);
			for(int j=0;j<i;j++)
			{
				a*=10;
				b*=10;
				a+=arr[j];
				b+=arr[i-1-j];
			}
			n=b-a;
			m++;
			if((n==0&&m==1)||(m==1&&i!=4))
			{
				m=0;
				printf("No!!\n");
				break;
			}
			printf("%d-%d=%d\n",b,a,n);
		};
		if(m>0)
			printf("Ok!! %d times\n",m);
	}
	return 0;
}


你可能感兴趣的:(POJ1350 Cabric Number Problem [模拟])