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;
}

  

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12263792.html