美文网首页
B1019 数字黑洞 (20分)

B1019 数字黑洞 (20分)

作者: km15 | 来源:发表于2020-02-08 11:02 被阅读0次

    /*
    题意:
    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;
    }

    相关文章

      网友评论

          本文标题:B1019 数字黑洞 (20分)

          本文链接:https://www.haomeiwen.com/subject/iyzbxhtx.html