题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/994805400954585088
首先分析一下这道题目的考点:
1.获取一个数字的各个位数
2.排序
3.循环
4.用最简单的整数输出就可以解决问题,如果将其转化为字符串再转换回来,比较麻烦。建议用前者。
那么这道题目有哪些陷进:
1.对于很多人说的0000和10000,并不需要考虑,也就是while(N)也是可以的,因为题目中给的集合就是开区间
2.对于很多人用do-while,其实用while也很方便,这道题目没有什么陷阱,注意细节就行了。自己a了好几次都是18分,
然后把代码重新写了一遍就满分了,神奇,可能有些小细节真的很难发现。
#include<bits/stdc++.h> /*这是一个万能头文件*/
using namespace std;
int digit[5];
void get_digit(int num)
{
/*获取一个数字的各个位数,对于初学者要非常熟练的掌握才可以*/
int i = 0;
while(num)
{
digit[i++] = num%10;
num/=10;
}
}
bool cmp(int a,int b)
{
/*按升序排列一个数组*/
return a > b;
}
int get_integer(int a[])
{
/*将数组中的各个数字重新组成一个新的整数*/
int temp = 0;
for(int i =0; i < 4; i++)
temp = temp * 10 + a[i];
return temp;
}
int main()
{
int N;
scanf("%d",&N);
while(N)
{
/*while(1)会更好一点*/
get_digit(N);
sort(digit,digit+4);
int tmp1 = get_integer(digit);
sort(digit,digit+4,cmp);
int tmp2 = get_integer(digit);
N = tmp2 - tmp1;
//printf("%d %d\n",tmp2,tmp1);
printf("%04d - %04d = %04d\n",tmp2,tmp1,N);
if(N == 0 || N == 6174)
break;
}
return 0;
}