前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1019. 数字黑洞 (20)

1019. 数字黑洞 (20)

作者头像
AI那点小事
发布2020-04-20 18:18:49
4180
发布2020-04-20 18:18:49
举报
文章被收录于专栏:AI那点小事AI那点小事

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

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

7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 … …

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

输入格式:

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

输出格式:

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

输入样例1: 6767 输出样例1: 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 输入样例2: 2222 输出样例2: 2222 - 2222 = 0000

#include <iostream>
using namespace std;

bool IsSame( int a)
{
    int num[4];
    for ( int i = 0 ; i < 4 ; i++){
        num[i] = a % 10;
        a /= 10;
    }
    int tmp = num[0];
    int count = 1;
    for ( int i = 1 ; i < 4 ; i++){
        if (num[i] == tmp){
            count++;
        }
    }
    if ( count == 4){
        return true;
    }else{
        return false;
    }
}

int NotMaxSort(int Num)
{
    int num[4];
    for ( int i = 0 ; i < 4 ; i++){
            num[i] = Num % 10;
            Num /= 10;
    }
    for ( int i = 0 ; i < 3 ; i++){
        for ( int j = i + 1 ; j < 4 ; j++){
            if ( num[j] >= num[i] ){
                num[i] = num[i] + num[j];
                num[j] = num[i] - num[j];
                num[i] = num[i] - num[j];
            }
        }
    } 
    int sum = 0;
    for ( int i = 0 ; i < 4 ; i++){
        sum = sum * 10 + num[i];
    } 

    return sum;
}

int NotMinSort(int Num)
{
    int num[4];
    for ( int i = 0 ; i < 4 ; i++){
            num[i] = Num % 10;
            Num /= 10;
    }
    for ( int i = 0 ; i < 3 ; i++){
        for ( int j = i + 1 ; j < 4 ; j++){
            if ( num[j] <= num[i] ){
                num[i] = num[i] + num[j];
                num[j] = num[i] - num[j];
                num[i] = num[i] - num[j];
            }
        }
    } 
    int sum = 0;
    for ( int i = 0 ; i < 4 ; i++){
        sum = sum * 10 + num[i];
    } 

    return sum;
}

int main()
{
    int Num;
    cin>>Num;
        if ( IsSame(Num) == false){
            int a ,b ,c;
            do{
                a =  NotMaxSort(Num);
                b =  NotMinSort(Num);
                c = a - b;
                cout<<a<<" - ";
                if ( b == 0 ){
                    cout<<"0000 = "<<c<<endl;
                }else{
                    if ( b / 10 == 0){
                        cout<<"000"<<b<<" = "<<c<<endl;
                    }else{
                        if ( b / 100 == 0){
                            cout<<"00"<<b<<" = "<<c<<endl;
                        }else{
                            if ( b / 1000 == 0){
                                cout<<"0"<<b<<" = "<<c<<endl;
                            }else{
                                 cout<<b<<" = "<<c<<endl;
                            }
                        }
                    } 
                }
                Num = c;
            }while( c != 6174);
        }
        else{
            cout<<Num<<" - "<<Num<<" = 0000\n"; 
        }

    return 0;
}
这里写图片描述
这里写图片描述

(PS:图中显示的错误实在找不出来了。)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档