/*
题意:
1、输入四个数字,按非递增排序,再按非递减排序,然后两数相减,知道出现6174
数在10的4次方
2、如果数字是全都一样的,就输出0000
解题:
1、只能输入字符串了,或者数字,把每一位剥离出来在一个数组中(取余)
2、然后sort函数
3、还要再把它转为数字(设置成函数吧)
4、用while,如果ans!=6147,就一直减,迭代这个过程
learn && wrong:
1、不足四位,补0
2、用for转为数组,本质没有变,就是少了个变量,更简单了
3、while(1)与break联用
4、dev如何自动查看变量呢,没有提示好麻烦呀
*/
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int array1[5];
int into_num(int a[]) { //转为数字函数
int temp = 0;
for (int i = 0; i < 4; ++i) {
temp = temp * 10 + a[i];
}
return temp;
}
int xiabiao;
void into_array(int a) { //转为数组 (!!!!)
for (int i = 0;i < 4;++i) {
array1[i] = a % 10;
a /= 10;
}
}
int main(int argc, char** argv) {
int num;
cin >> num; //输入这个数字
int ans = num;
while (1) {
into_array(ans); //每次进入前,先转为数组,这里每次xiabiao都会重置为0,所以下标是没错的
sort(array1, array1 + 4);//递增排序
int n1 = into_num(array1);
sort(array1, array1 + 4, cmp);//递减排序
int n2 = into_num(array1);
ans = n2 - n1;
printf("%04d - %04d = %04d\n", n2, n1, ans);//!!!
if (ans == 0 || ans == 6174) break;//(!!!)while为1连用
}
return 0;
}
网友评论