PAT10191019. 数字黑洞 (20)

来源:互联网 发布:小米线刷软件 编辑:程序博客网 时间:2024/06/05 00:39

给定任一个各位数字不完全相同的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 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 6174
输入样例2:
2222
输出样例2:
2222 - 2222 = 0000
#include<cstdio>using namespace std;int increase_seq(int a){int digit[4]={a/1000,a/100%10,a/10%10,a%10};for(int i=0;i<4;i++){for(int j=1;j<4-i;j++){if(digit[j]<digit[j-1]){int temp=digit[j];digit[j]=digit[j-1];digit[j-1]=temp;}}}return digit[0]*1000+digit[1]*100+digit[2]*10+digit[3];}int reverse_number(int b){return (b%10)*1000+(b/10%10)*100+b/100%10*10+b/1000;}void show_black_hole(int number){int increase_number=increase_seq(number);int decrease_number=reverse_number(increase_number);int cha=decrease_number-increase_number;printf("%04d - %04d = %04d\n",decrease_number,increase_number,cha);if(cha==0 ||cha==6174)return;elseshow_black_hole(cha);}int main(){int digit;scanf("%d",&digit);if(digit<=0 ||digit>=10000)return -1;show_black_hole(digit);return 0;}

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 父亲经常打母亲怎么办 父母总吵架打架怎么办 老婆老提离婚怎么办 睡眠不好脑子疼怎么办 父母离异孩子结婚怎么办 父母离异后房产怎么办 夫妻离婚后孩子怎么办 离婚小孩的户口怎么办 离婚孩子落户口怎么办 父母离婚孩子出生证怎么办 离婚怎么办孩子的户口 离婚了儿子户口怎么办 性格不合离婚 孩子怎么办 前夫不迁走户口怎么办 我想离婚老婆不同意怎么办 要离婚没身份证怎么办 老婆怀孕想离婚怎么办 我老婆起诉离婚怎么办 父母冷战我该怎么办 经常跟父母亲吵架怎么办 14岁父母离婚怎么办 夫妻为钱吵架怎么办 离婚后担心孩子怎么办 不爱对方有孩子怎么办 爸和大伯吵架怎么办 孩子和家长吵架怎么办 老公吵架摔东西怎么办 楼上吵架摔东西怎么办 宿友没素质的人怎么办 父母人品差自私怎么办 家里穷压力大怎么办 偏执型人格障碍怎么办 遇到低素质保安怎么办 和老婆性格不合怎么办 当心理阴暗时怎么办 孩子胆子小怎么办呢? 父母伤亡的孩子怎么办 小孩上课老是走神怎么办 小孩上课老走神怎么办 小孩上课爱走神怎么办 孩子对学习成绩无所谓怎么办