1069 The Black Hole of Numbers (20point(s)) Easy only once *注意思想:函数,数字和数字数组的转换问题
基本思路:
排序相减问题,题是水题,但是暴露出几个编程的不好习惯;
关键点:
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;
}

浙公网安备 33010602011771号