B1019 数字黑洞 (20分)

2020-02-08  本文已影响0人  km15

/*
题意:
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;
}
上一篇下一篇

猜你喜欢

热点阅读