• 1019 数字黑洞 (坑点说明)


    给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。

    例如,我们从6767开始,将得到

    1. 7766 - 6677 = 1089
    2. 9810 - 0189 = 9621
    3. 9621 - 1269 = 8352
    4. 8532 - 2358 = 6174
    5. 7641 - 1467 = 6174
    6. ... ...

    现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

    输入格式:

    输入给出一个 (0,104) 区间内的正整数 N。

    输出格式:

    如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。

    输入样例 1:

    6767
    

    输出样例 1:

    1. 7766 - 6677 = 1089
    2. 9810 - 0189 = 9621
    3. 9621 - 1269 = 8352
    4. 8532 - 2358 = 6174

    输入样例 2:

    输出样例 2:

    2222 - 2222 = 0000

    坑点说明 :

    1. 6174 本身输入,输出为 7641 - 1467 = 6174

    2.“补零输入”,如输入1等价输入1000,需补充0致4位数 

    3.max-min的结果如果不是4位数也需要补零

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. vector<int> num;
    6. int N,max,min;
    7. cin >> N;
    8. do{
    9. while (N<1000) N*=10; // 注意添加0
    10. while (N){
    11. num.push_back(N%10);
    12. N/=10;
    13. }
    14. sort(num.begin(),num.end());
    15. min = num[0]*1000+num[1]*100+num[2]*10+num[3];
    16. max = num[3]*1000+num[2]*100+num[1]*10+num[0];
    17. N = max - min;
    18. printf("%04d - %04d = %04d\n",max,min,N);
    19. if(num[0]==num[1] && num[0]==num[2] && num[0]==num[3]) break;
    20. num.clear();
    21. } while (N!=6174);
    22. return 0;
    23. }

  • 相关阅读:
    Linux安装jmeter
    SpringBoot依赖和代码分开打包
    python常用标准库(时间模块time和datetime)
    [传智杯 #5 初赛] I-不散的宴会
    基于Spring Boot应用Java原生JDBC操作数据库(查增改删)
    linux系统打补丁
    有才有料有趣,聊聊技术Demo的二三事
    Web Component-初识
    [Linux系统编程]_网络编程(五)
    web开发初级工程师学习笔记
  • 原文地址:https://blog.csdn.net/daybreak_alonely/article/details/126069369