基本思路:
排序相减问题,题是水题,但是暴露出几个编程的不好习惯;
关键点:
1.定义函数不费时间,也不会增加复杂度,模块化还是要用的;
2.注意数组转数字的方式,利用多项式相乘可以快捷解决,而不用算次方:
int getnumber() { int n = 0; for (int i = 0; i < 4; i++) { n =n*10+vec[i]; } return n; }
3.注意数字转数组的方式。以前以往都是利用补零加reverse,但是如果要重新排序的话,直接取余除10可以让无数字位自动补零;
#include<iostream> #include<stdlib.h> #include<stdio.h> #include<vector> #include<string> #include<math.h> #include<algorithm> #include<cstring> using namespace std; using std::vector; vector<int>vec(4); bool cmp(int a, int b) { return a > b; } int getnumber() { int n = 0; for (int i = 0; i < 4; i++) { n =n*10+vec[i]; } return n; } void getvec(int n) { for (int i = 0; i < 4; i++) { vec[i] = n % 10; n /= 10; } } int main() { int n; cin >> n; int st, ed; while (1) { getvec(n); sort(vec.begin(), vec.end(), cmp); st = getnumber(); sort(vec.begin(), vec.end()); ed = getnumber(); n = st - ed; printf("%04d - %04d = %04d\n", st, ed, n); if (n == 0 || n == 6174) break; } system("pause"); return 0; }