您的位置:首页 > 其它

POJ1350 Cabric Number Problem [模拟]

2012-02-01 19:41 162 查看
思路:

对这种整数的各个位上的数字之间的操作还是习惯用类似左移右移的方法,即/=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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: